谷歌模拟编译错误(错误:"<函数名称>"不是一种类型)

Google mock compile error (error: ‘<function name>’ is not a type)

本文关键字:错误 gt 一种 类型 函数 编译 模拟 lt 谷歌      更新时间:2023-10-16

我的实际代码(类名更改,一些删除,因为这是公司机密,但只有一个编译器错误,所以我删除的应该不会影响事情)

class Xyz
{
public:
   virtual void vPrintStatus() const;  
};

及其模拟

class MockXyz : public Xyz
{
 public:
    MOCK_CONST_METHOD0(vPrintStatus,
            void());
};

这给了我一个编译错误:error: ‘vPrintStatus’ is not a type

#include,等等都可以。编译器显然会找到vPrintStatus,因为,如果我将其更改为未定义的内容:

MOCK_CONST_METHOD0(independence,
                void());

我得到error: ‘independence’ has not been declared

因此,编译器找到vPrintStatus并似乎知道它的类型(或者至少知道它不是什么类型)。

我确信我正在遵循MOCK_CONST_METHOD0的语法-模拟宏应该期待一个函数名,而不是类型,作为它的第一个参数。

我做错了什么?

下面的错误信息:

error: ‘vPrintStatus’ is not a type

表示MOCK_CONST_METHOD0(vPrintStatus, void());被编译器解析为名为MOCK_CONST_METHOD0的成员函数的声明,该函数有两个参数,一个是类型 vPrintStatus(因此出现错误),另一个是函数指针类型(调整后为void(*)())。显然,这意味着宏MOCK_CONST_METHOD0的定义对于mock声明所在的翻译单元是不可见的。请确保您已将<gmock/gmock.h>包含到该文件中。

我有一个类似的问题,事实证明我试图使用:

MOCK_CONST_METHODO代替

MOCK_CONST_METHOD0(0比0好得多)