2017-05-31 22 views
1

我试图改变我的卡类int变量的值,如下图所示:更改对象的私有变量在一个载体

class Card { 
    public: 
    enum Suits {diamond, heart, club, spade}; 
    Card (int _rank, Suits _suit) : rank{_rank}, suit{_suit} {} 
    int getRank(); 
    void changeRank(int change); 

    private: 
    int rank; 
    Suits suit; 
}; 

card.cpp:

int Card::getRank() { 
    return rank; 
} 

void Card::changeRank(int change) { 
    rank = change; 
} 

这里是Player类:

class Player { 
    private: 
    vector<Card> playerHand; 

    public: 
    Card getCard(int index); 
}; 

player.cpp:

Card Player::getCard(int index) { 
    return playerHand[index]; 
} 

这里是dealer.cpp文件实际上使呼叫:

if (oneOrEleven == 11) { 
    player.getCard(i).changeRank(11); 
    cout << "The ace will have a value of 11" << endl; 
} 

此代码调用方法“changeRank()”,它只是没有在卡对象改变“等级”的价值。

我在做什么错?

+1

'getCard'正在返回值,所以你得到的是一个副本。将其更改为按参考返回。 –

回答

2

您应该将Player::getCard从返回值改为返回参考值。例如

Card& Player::getCard(int index) { 
    return playerHand[index]; 
} 

另外,您将始终在返回的副本上进行修改,这与向量中的原始元素无关。

+0

非常感谢 – CheetahBongos

1

此代码调用方法“changeRank()”,它只是不会改变Card对象中“rank”的值 。

变化getCard的函数声明参照返回,即:

Card& getCard(int index); 

你有你的函数声明现在的方式,它是由价值返回卡对象,和不作参考。

当您按值返回时,您返回的是对象的副本,而不是实际的对象本身。