使用set-function在类中设置字符串。

时间:2017-02-28 18:52:49

标签: c++ string function class

我无法弄清楚为什么我不能用函数player.setClassName()更改字符串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);
}

用于更改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);
};

1 个答案:

答案 0 :(得分:0)

classChoice()接受player对象按值,因此它在对象的副本上运行。对该副本所做的任何更改都不会反映在传递给classChoice()的原始对象中。如果您想更新原始内容,则需要通过引用(或指针)来传递它:

void classChoice(playerClass &player) 

另外,setClassName()应该接受string引用的const输入。 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;
}