返回指向std ::指针列表的指针时出现ImplicitCast_错误

时间:2014-04-29 15:41:04

标签: c++ gmock

所以我有这个小问题。我上课时我试图嘲笑,但我收到了错误。有问题的方法是返回一个指向std :: object指针列表的指针。下面是一些复制问题的代码:

#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

有人能告诉我导致这种情况的原因是什么吗?我做错了什么?

2 个答案:

答案 0 :(得分:3)

这看起来不对:

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

应该是:

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

如果与使用的编码标准相关,我不建议std::list中的非包装指针...

答案 1 :(得分:0)

据我记得,在googlemock中你只能模拟虚拟方法。 因此,“Foo”类中的方法“getStuff()”应该是虚拟的。