我正在使用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>
替换为int
或void
std::pair
参数的方法上使用,而不是将其返回答案 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)