【问题标题】:Set string in class with a set-function.使用设置函数在类中设置字符串。
【发布时间】:2017-02-28 18:52:48
【问题描述】:

我不明白为什么我不能用函数 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);
}

我用来更改类名的函数。

//PlayerClass.cpp

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

玩家类

//PlayerClass.h

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

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

【问题讨论】:

    标签: c++ string function class


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多