从类外部为类中的变量赋值

时间:2018-03-21 19:52:20

标签: c++

我在函数中尝试在类外部的类值中声明赋值变量时遇到了麻烦。示例如下:

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

2 个答案:

答案 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并将武器字符串直接分配给对象成员变量。