2017-02-28 32 views
0

我無法弄清楚爲什麼我不能使用函數player.setClassName()更改字符串className; 。有人能解釋我做錯了什麼嗎?用set函數在類中設置字符串。

//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); 
} 

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; 
} 
相關問題