我无法弄清楚为什么我不能用函数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);
};
答案 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;
}