运算符<<重载对象的向量

时间:2016-01-07 22:21:04

标签: c++ operator-overloading operators ostream

大家。

我有一个名为" Card"和" CardDeck"其中第二个是向量,其中包含许多第一类卡片。

我的<<重载就像这样:

istream& operator<<(ostream& os, Card& card) {
    string str;
    if(cardValueCorrect(card._value)){
        str += to_string(card._value);
    } else {
        str += card._identier;
    }
    str += suitToChar(card._suit);
    return os << str;

我认为应该没问题,至少编译器不会抱怨这个。在我的CardDeck中我想要重载&lt;&lt;所以它会打印所有卡片。

CardDeck << overloading seems like that: 
ostream& operator<<(ostream& os, CardDeck& odeck){
    for(const Card cur_card: odeck._Deck){
        os << cur_card << ' ';
    }
    return os;
}

它抱怨访问私人领域的卡片,并且:

invalid initialization of reference of type 'std::istream& {aka std::basic_istream<char>&}' from expression of type 'std::basic_ostream<char>'

然后是其他非常奇怪的东西(关于第一个运算符重载中的每一行):

within this context

修改

istream to ostream 已修复。

这是一个探测器。现在我看到了162个与#34; info&#34;关于CardDeck运算符重载并告诉我,我进入CardDeck的私有字段(向量在那里)。

Eather:

`invalid initialization of non-const reference of type 'CardDeck&' from an rvalue of type no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'const Card')` 

以及很多&#34; info&#34; (日食)这种重复模式:

'const Card' is not derived from 'const std::extreme_value_distribution<_RealType>'

1 个答案:

答案 0 :(得分:2)

替换

istream& operator<<(ostream& os, Card& card)

ostream& operator<<(ostream& os, Card& card)