2014-04-29 123 views
0

所以我有這個小問題。我有班級,我試圖嘲笑,但我得到一個錯誤。有問題的方法是返回一個指向對象指針std :: list的指針。下面是一些重複的問題代碼:返回一個std ::指針列表指針時的ImplicitCast_錯誤

#include <ByteBuffer.h> 
. . . 
class Foo { 
public: 
    std::list<ByteBuffer*>* getStuff() { return new std::list<ByteBuffer*>(); } 
}; 

class MockFoo : public Foo { 
public: 
    MOCK_METHOD0(getStuff, std::list<ByteBuffer>*()); 
}; 

TEST_F(FooTest, shouldDoStuff) { 
    MockFoo* mfoo = new MockFoo(); 
    std::list<ByteBuffer*>* plist = new std::list<ByteBuffer*>(); 
    EXPECT_CALL(*mfoo, getStuff()).WillOnce(Return(plist)); 
} 

當我編譯此,我得到了以下錯誤:

/usr/local/include/gmock/gmock-actions.h:491: error: no matching function for call to ‘ImplicitCast_(std::list<zios::common::ByteBuffer*, std::allocator<zios::common::ByteBuffer*> >*&)’ 
make: *** [Debug/FooTest.o] Error 1 

誰能告訴我是什麼引起的?我究竟做錯了什麼?

回答

3

這看起來錯:

MOCK_METHOD0(getStuff, std::list<ByteBuffer>*()); 

應該是:

MOCK_METHOD0(getStuff, std::list<ByteBuffer*>*()); 

應該在被相對於使用編碼標準,我不建議非包裹三分球std::list ...

0

據我記得,在googlemock中,你可以只模擬虛擬方法。 因此,您的方法「getStuff()」在類「Foo」中應該是虛擬的。

+0

兩者都對。然而,我真正的代碼中的問題仍然存在。我認爲我已經在這裏複製了它,但顯然不是。:(謝謝! – DaveR

+1

@ user1143970請複製粘貼你的「真實」代碼...它從來沒有工作試圖重新創建一個未經測試的樣本如果你必須***圖示***敏感的部件。 –