Search code examples
c++default-constructor

missing expression in a constructor


I have the following class:

  class BandMember
{
private:
    char *name;
    int age;
    int relationshipStatus;
    char *musicianType;
public:
    //functions
    void setName(char* name1);
    char * getName() const;
    void setAge(int age1);
    int getAge() const;
    void setRelationshipStatus(int status);
    int getRelationshipStatus() const;
    void setMusicianType(char* job);
    char* getMusicianType() const;
    BandMember* readBandMember();
    //print
    void print();

    //constructor
    BandMember(const char *nameToAdd = "no name", const int ageToAdd = 0, 
        const int relationshipStatusToAdd = 0, 
        const char *musicianTypeToAdd = "no music type");

    //destructor
    ~BandMember() { delete[] name; delete[] musicianType;}

    //copy constructor
    BandMember(const BandMember& bandMember);
};

in BandMember* BandMember::readMember the code is:

 BandMember* BandMember::readBandMember()
{
    char *nameNewMember, *musicTypeNewMember;
    int ageNewMember, familyStatusNewMember;

    nameNewMember = new char[NAME_LENGTH];
    musicTypeNewMember = new char[NAME_LENGTH];

    cin.ignore(10,'\n');
    cout << "Enter band member name: ";   //askName() - TODO
    cin.getline(nameNewMember, NAME_LENGTH);
    reallocate(nameNewMember, strlen(nameNewMember));

    cout << "enter the age of the band member: ";  //askAge - TODO
    cin >> ageNewMember;

    cin.ignore(10,'\n');
    cout << "enter musician type: ";     //askMusicianType - TODO
    cin.getline(musicTypeNewMember, NAME_LENGTH);
    reallocate(musicTypeNewMember, strlen(musicTypeNewMember));

    return new BandMember(nameNewMember, ageNewMember,,musicTypeNewMember);

the problem is in the return value. The compiler says "missing expression, overload +1": but when I put return new BandMember(nameNewMember, ageNewMember,0,musicTypeNewMember); the code works fine... I don't understand why. I defined a default constractor with default values so why it's not working when I return it with a missing value ?


Solution

  • It seems you misunderstand how default arguments works in C++...

    You can't skip arguments and have them be the default value. If you want to provide a later argument then you need to provide all arguments in front of it.

    Therefore BandMember(nameNewMember, ageNewMember,,musicTypeNewMember) with the double-comma is not correct, you must provide the relationshipStatusToAdd argument as well:

    return new BandMember(nameNewMember, ageNewMember,0,musicTypeNewMember);
    //                                                ^
    // Added argument here --------------------------/