Google模拟编译错误(错误:'<function name =“”>'不是类型)

时间:2015-09-16 14:59:54

标签: c++ googlemock

我的实际代码(类名已更改,有些已删除,因为它是公司机密,但只有一个编译器错误,因此我剪切的内容不应影响事物)

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期待函数名称,而不是类型,作为其第一个参数。

我做错了什么?

2 个答案:

答案 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更好地为零)