【问题标题】:Google mock compile error (error: ‘<function name>’ is not a type)Google mock 编译错误(错误:'<function name>' is not a type)
【发布时间】:2015-09-16 14:59:53
【问题描述】:

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

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 的语法 - 模拟宏应该期待一个函数名,而不是类型,作为它的第一个参数。

我做错了什么?

【问题讨论】:

  • 那是真正的代码,是从你正在编译的文件中复制粘贴过来的吗?
  • 看来MOCK_CONST_METHOD0被解析为成员函数名,而不是宏,请确保包含正确
  • 还要确保Xyz 有一个虚拟析构函数。
  • @PiotrSkotnicki - 你是对的 - 缺少 #include "gmock.h"。随时将其发布为答案。很抱歉浪费大家的时间,但我已经为此努力了好几个小时:-(

标签: c++ googlemock


【解决方案1】:

以下错误信息:

error: ‘vPrintStatus’ is not a type

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

【讨论】:

  • 仅供参考:当我尝试 MOCK_METHOD11 时,我发现我遇到了同样的错误。 GMock 在模拟方法中不支持超过 10 个参数。见stackoverflow.com/q/15539169/149212
  • 在不使用命名空间测试的情况下尝试使用 StrictMock 时出现此错误; // 这个错误有几个可能的原因
【解决方案2】:

我遇到了类似的问题,结果我正在尝试使用:

MOCK_CONST_METHODO 而不是

MOCK_CONST_METHOD0(0 效果更好)

【讨论】:

  • 获取自己的普通字体(如 Iosevka 等)或语法感知编辑器/IDE
猜你喜欢
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 2023-02-24
相关资源
最近更新 更多