Ras*_*yak 8 c++ googletest visual-studio-2010
当我使用ASSERT_TRUE()提供时,Gtest我得到以下错误.
return type does not match function type带下划线VS 2010..
#include "gtest\gtest.h"
class abc {
pubilc:
bool fun();
private:
bool fun1();
};
Run Code Online (Sandbox Code Playgroud)
bool abc::fun()
{
ASSERT_TRUE(fun1()); // Getting error: return type does not match function type
}
bool abc::fun1()
{
return true; // True or false depanding on operation
}
Run Code Online (Sandbox Code Playgroud)
Dow*_*God 20
ASSERT_TRUE是一个宏.展开时,它将包含一个分支,如:
if (fun1() == false) {
return;
}
Run Code Online (Sandbox Code Playgroud)
这是如何ASSERT_TRUE在失败时硬停止,但这也意味着您的方法bool abc::fun()现在具有void返回退出路径,与其签名冲突.
可能的修复包括不要使用硬停止断言:
bool abc::fun(){
bool result = fun1();
EXPECT_TRUE(result); //No return in expansion
//No hard stop!
return result;
}
Run Code Online (Sandbox Code Playgroud)
或者,如果不需要,可以更改方法返回类型:
void abc::fun(){
ASSERT_TRUE(fun1()); //Hard stop on failure
}
Run Code Online (Sandbox Code Playgroud)
或通过引用返回:
void abc::fun(bool &outResult){
outResult = fun1(); //return result by reference
ASSERT_TRUE(result);
}
Run Code Online (Sandbox Code Playgroud)
中没有return指定语句fun(),但它返回一个bool. 添加return false;orreturn true;或fun()将其返回类型更改为void:
void abc::fun()
{
ASSERT_TRUE(fun1());
}
Run Code Online (Sandbox Code Playgroud)
基于我的编译器抱怨构造函数(或析构函数)无法返回值。这是怎么回事?其中指出(逐字):
由于 C++ 的特殊性,为了支持将消息流式传输到 ASSERT_* 的语法,例如
ASSERT_EQ(1, Foo()) << "blah blah" << foo;
Run Code Online (Sandbox Code Playgroud)
我们不得不放弃在构造函数和析构函数中使用 ASSERT* 和 FAIL*(但不是 EXPECT* 和 ADD_FAILURE*)。解决方法是将构造函数/析构函数的内容移动到私有 void 成员函数,或者切换到 EXPECT_*()(如果可行)。用户指南中的这一部分对此进行了解释。
该return类型必须位于void使用ASSERT_*()宏的函数中。
| 归档时间: |
|
| 查看次数: |
12504 次 |
| 最近记录: |