我的实际代码(类名更改,一些切,因为它是公司保密,但只有一个编译错误,所以我切不应该影响事情)
class Xyz
{
public:
virtual void vPrintStatus() const;
};
Run Code Online (Sandbox Code Playgroud)
和它的模拟
class MockXyz : public Xyz
{
public:
MOCK_CONST_METHOD0(vPrintStatus,
void());
};
Run Code Online (Sandbox Code Playgroud)
这给了我一个编译器错误: error: ‘vPrintStatus’ is not a type
#includes等都可以.编译器显然发现vPrintStatus,如果我将其更改为未定义的内容:
MOCK_CONST_METHOD0(independence,
void());
Run Code Online (Sandbox Code Playgroud)
我得到error: ‘independence’ has not been declared.
因此,编译器找到vPrintStatus并且似乎知道它的类型(或者至少知道它不是什么类型).
我确信我遵循的语法MOCK_CONST_METHOD0- 模拟宏shoudl期望函数名称,而不是类型,作为它的第一个参数.
我究竟做错了什么?
以下错误消息:
error: ‘vPrintStatus’ is not a type
Run Code Online (Sandbox Code Playgroud)
表示MOCK_CONST_METHOD0(vPrintStatus, void());编译器将其解析为成员函数的声明,命名为MOCK_CONST_METHOD0两个参数,一个是类型 vPrintStatus(因此是错误),另一个是函数指针类型(void(*)()调整后).显然,这意味着MOCK_CONST_METHOD0模拟声明所属的翻译单元不能看到宏的定义.确保已包含<gmock/gmock.h>该文件.