我在函数中尝试在类外部的类值中声明赋值变量时遇到了麻烦。示例如下:
class player {
public:
string playerWeapon;
void setWeapon();
}
然后可能在cpp文件中声明它的头文件之外:
void player::setWeapon(){
player playerobj;
int playerWeaponInt;
cout << "choose Number" << endl
<< "'1' for gun" << endl
<< "'2' for axe" << endl;
cin >> playerWeaponInt;
然后我尝试使用if语句将数字分配给可以放入变量的字符串:
if(playerWeaponInt == 1){
playerobj.playerWeapon = "gun";
else if (playerWeaponInt == 2){
playerobj.playerWeapon = "axe"
}
但是,无论何时我试图在程序中稍后显示它,变量都是空的,没有任何显示。任何人都可以帮助我
编辑:这是一段额外的代码,所以它将编译
player playerObj;
main(){
playerObj.setWeapon;
}
答案 0 :(得分:4)
问题是setWeapon
内的第一个代码行:
player playerobj;
将创建另一个玩家对象。显然你想要设置当前玩家的当前武器,代码应该是:
void player::setWeapon(){
cout << "choose Number" << endl
<< "'1' for gun" << endl
<< "'2' for axe" << endl;
cin >> playerWeaponInt;
if(playerWeaponInt == 1){
playerWeapon = "gun"; // NOTE: no "playerobj."
} else if (playerWeaponInt == 2){
playerWeapon = "axe";
}
}
执行方法时,this
指向隐式对象。
当你在一个方法中说playerWeapon
时,它意味着你的意思
this->playerWeapon
。
答案 1 :(得分:0)
首先,您不应通过制作内部数据class player
来公开playerWeapon
的内部陈述。更好地设置一种方法来设置和使数据私有。提案:
class player {
public:
void setPlayerWeapon(const string &playerWeapon);
void setWeapon();
private:
string playerWeapon;
}
接下来,您要在哪里显示playerobj.playerWeapon的内容?由于player::setWeapon
具有自己的对象playerobj
,它将在离开方法时被销毁,您只能在当前方法调用中显示它。可能这不是你想要做的。我假设您要设置当前对象的playerWeapon
。如果是这样,只需删除辅助对象
来自方法的player playerobj
并将武器字符串直接分配给对象成员变量。