宏MOCK_METHOD传递了3个参数,但是std :: pair只带了2个错误

时间:2015-02-15 23:41:11

标签: c++ macros std-pair googlemock

我正在使用Google Mock 1.6.0。使用MOCK_METHODN宏时,似乎认为我为返回std::pair的方法传递了3个参数:

#include <gmock/gmock.h>
#include <utility>
class IFoo {
public:
    virtual std::pair<int, int> bar() = 0;
};
class MockFoo {
public:
    MOCK_METHOD0(bar, std::pair<int, int>());
};
int main() {
    MockFoo f;
    return 0;
}

编译器输出(GCC 4.6.3):

main.cpp:9:44: error: macro "MOCK_METHOD0" passed 3 arguments, but takes just 2
main.cpp:9:5: error: ‘MOCK_METHOD0’ does not name a type

如果我:

,则不会出现此错误
  • std::pair<int, int>替换为intvoid
  • 等简单类型
  • 在具有std::pair参数的方法上使用,而不是将其返回

2 个答案:

答案 0 :(得分:0)

这似乎是版本1.6.0的错误。相同的代码适用于版本1.7.0 ,因此最佳解决方案是升级到

或者,使用Clang进行编译也会遇到相同的错误,但提供了一个强有力的线索,其中包含以下错误:

main.cpp:9:38: error: too many arguments provided to function-like macro invocation
    MOCK_METHOD0(bar, std::pair<int, int>());
                                     ^
main.cpp:9:5: error: C++ requires a type specifier for all declarations
    MOCK_METHOD0(bar, std::pair<int, int>());
    ^~~~~~~~~~~~
2 errors generated.

看起来一个错误的宏扩展正在将,内的std::pair<int, int>解释为另一个参数。因此,您也可以通过避开,来解决此问题,例如使用typedef

typedef std::pair<int, int> MyType;
class MockFoo {
public:
    MOCK_METHOD0(bar, MyType());
};

答案 1 :(得分:0)

FAQ GoogleMock中:

  

如果返回类型包含不受保护的逗号,则仍需要typedef,但这种情况更为罕见。

使用typedef