What is the meaning of this 'error: ‘send’ is not a type' in declaring mocks

What is the meaning of this 'error: ‘send’ is not a type' in declaring mocks

我正在尝试模仿 zmq.hpp

namespace zmq {
class ZmqMockSocket : public socket_t {
    MOCK_METHOD((size_t), send, (), (override));
};

我收到以下错误:

zmq_mock.h:16:25: error: ‘send’ is not a type
MOCK_METHOD((size_t), send, (), (override);
                      ^~~~

send 被定义为 class socket_t 为:

virtual size_t send (void) = 0;

您正在使用 MOCK_METHOD,如新 gmock 说明书中所述。我遇到了同样的问题,最后发现是因为我的旧 gtest/gmock 版本。

我看到了这个 issue,旧的 gtest/gmock 版本支持 MOCK_METHOD。它的第二个参数是一个类型。这就是您的编译器将函数 'send' 视为类型的原因。 然后在 2018 年有这个 change,其中引入了 MOCK_METHOD(ReturnType, MethodName, (Args...))。 您还可以查看发布 v1.10.0.

解决方案:使用旧式 MOCK_METHODn 宏或使用具有正确参数顺序的 MOCK_METHOD。