2014-04-29 5 views
0

Итак, у меня есть эта небольшая проблема. У меня есть класс, который я пытаюсь высмеять, но я получаю сообщение об ошибке. Этот метод возвращает указатель на std :: list указателей объектов. Ниже приведен код, который воспроизводит проблему:Ошибка ImplicitCast_ при возврате указателя на std :: список указателей

#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 Скопируйте в свой «настоящий» код ... Он никогда не работает, пытаясь воссоздать непроверенный образец. Если вам нужно тогда *** splat *** части, которые являются чувствительными. –