2017-02-28 5 views
0

なぜ、player.setClassName()関数でstring classNameを変更できないのかわかりません。 。誰かが私が間違っていることを説明することはできますか?文字列を集合関数でクラスに設定します。

//Functions.cpp 

void classChoice(playerClass player) 
{ 
    int select = 0; 
    string text = "Text"; 
    do { 
     cin >> select; 
     getchar(); 
     switch (select) { 
     case 1:  
      player.setClassName(text); 
      break; 
     case 2: 
      break; 
     case 3: 
      break; 
     default: 
     } 
    } while (select > 1 && select > 3); 
} 

class imを使用してclassNameを変更します。

//PlayerClass.cpp 

void playerClass::setClassName(string &className) { 
    this->className = className; 
} 

playerclass

//PlayerClass.h 

class playerClass : public playerCharacter, public Skills 
{ 
private: 
    string className; 
public: 
    playerClass(); 
    playerClass(string className); 
    virtual ~playerClass(); 

string getClassName(); 
void setClassName(string &className); 
}; 

答えて

0

classChoice()値によってplayerオブジェクトを受け付けるので、オブジェクトのコピー上で動作しています。そのコピーに加えられた変更は、classChoice()に渡された元のオブジェクトには反映されません。あなたは、元を更新する場合は、参照(またはポインタ)で、それを渡す必要がある代わりに:

void classChoice(playerClass &player) 

また、setClassName()ではなくconst参照によりそのstring入力を受け入れる必要があります。また、getClassName()constと宣言してください。

class playerClass : public ... 
{ 
... 
public: 
    ... 
    string getClassName() const; 
    void setClassName(const string &className); 
}; 

string playerClass::getClassName() const { 
    return this->className; 
} 

void playerClass::setClassName(const string &className) { 
    this->className = className; 
} 
関連する問題