我的实际代码(类名已更改,有些已删除,因为它是公司机密,但只有一个编译器错误,因此我剪切的内容不应影响事物)
class Xyz
{
public:
virtual void vPrintStatus() const;
};
及其模拟
class MockXyz : public Xyz
{
public:
MOCK_CONST_METHOD0(vPrintStatus,
void());
};
这给了我一个编译器错误:error: ‘vPrintStatus’ is not a type
#includes等都行。编译器显然找到了vPrintStatus
,因为如果我把它改成未定义的东西:
MOCK_CONST_METHOD0(independence,
void());
我得到error: ‘independence’ has not been declared
。
因此,编译器找到vPrintStatus
并且似乎知道它的类型(或者至少知道它不是什么类型)。
我确信我遵循MOCK_CONST_METHOD0
的语法 - 模拟宏shoudl期待函数名称,而不是类型,作为其第一个参数。
我做错了什么?
答案 0 :(得分:5)
以下错误消息:
error: ‘vPrintStatus’ is not a type
表示编译器将MOCK_CONST_METHOD0(vPrintStatus, void());
解析为名为MOCK_CONST_METHOD0
的成员函数的声明,其中包含两个参数,一个是 type vPrintStatus
(因此错误),另一个是函数指针类型(调整后void(*)()
)。显然,这意味着宏MOCK_CONST_METHOD0
的定义对于模拟声明所属的翻译单元是不可见的。确保您已将<gmock/gmock.h>
包含在该文件中。
答案 1 :(得分:0)
我遇到了类似的问题,事实证明我在尝试使用:
MOCK_CONST_METHODO代替
MOCK_CONST_METHOD0(O更好地为零)