2017-05-31 36 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); 

你有你的函數聲明現在的方式,它是由價值返回卡對象,和不作參考。

當您按值返回時,您返回的是對象的副本,而不是實際的對象本身。