2016-12-30 10 views
1

私は2つのオブジェクト、正確にカード(gtestのユニットテスト)が必要です。 これは私のコードです:Gtest、equalsオブジェクト

#include "stdafx.h" 
#include <gtest\gtest.h> 
#include <vector> 

class Card { 
public: 
    Card(int value, int color) :value(value), color(color) {}; 
    int returnColor() const { return color; }; 
    int returnValue() const { return value; }; 
    bool operator==(const Card &card) { 
     return returnValue() == card.returnValue(); 
    }; 
private: 
    int value; 
    int color; 
}; 

class CardTest : public ::testing::Test { 
protected: 
    std::vector<Card> cards; 
    CardTest() { cards.push_back(Card(10, 2)); 
    cards.push_back(Card(10, 3)); 
    }; 
}; 
TEST_F(CardTest, firstTest) 
{ 
    EXPECT_EQ(cards.at(0), cards.at(1)); 
} 
int main(int argc, char *argv[]) 
{ 
    testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

私がエラーを持っている:

State Error C2678 binary '==': no operator found which takes a left-hand operand of type 'const Card' (or there is no acceptable conversion)

私は '==' 過負荷演算子を試してみてください、これは動作しない:/ たぶん、私は他の道を行かなければなりませんか? これは私の最初のユニットテストです:D。

+0

gtest.hのエラーポイント行1448 – 21koizyd

+1

'bool operator ==(const Card&card)const {...'?言い換えれば、関数はそれが与えられたリファレンスを突然変異させないことを約束するだけでなく、 'this'を突然変異させないことも約束するべきです。 – Unimportant

答えて

2

等価演算子はconstする必要があります:

constの方法の議論については
bool operator==(const Card &card) const { 
            ^^^^^ 

Meaning of "const" last in a C++ method declaration?

+0

ありがとう、私は知っていますが、初めてconstで演算子を使用する必要があります。それは単に... – 21koizyd

-1

を参照して、このお試しください:私はあなただけ&を持っていると思う

bool operator ==(const Card& card) { 
    return returnValue() == card.returnValue(); 
} 

を間違った場所で

+0

私は申し訳ありませんが、これは完全に間違っています。 – NPE

+0

うん、私は試して、これは私のソリューションのように同じです – 21koizyd