当我使用Gtest中提供的ASSERT_TRUE()时,我得到下面的错误。在VS 2010.中带下划线的return type does not match function type。
abc.h
#include "gtest\gtest.h"
class abc {
pubilc:
bool fun();
private:
bool fun1();
};abc.c
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
}发布于 2012-09-27 17:09:56
fun()中没有指定return语句,但它返回一个bool。将return false;或return true;添加到fun()或将其返回类型更改为void
void abc::fun()
{
ASSERT_TRUE(fun1());
}基于My compiler complains that a constructor (or destructor) cannot return a value. What's going on?,它声明(逐字):
由于C++的特性,为了支持将消息流式传输到ASSERT_*的语法,例如
ASSERT_EQ(1, Foo()) << "blah blah" << foo;在构造函数和析构函数中,我们不得不放弃使用ASSERT*和FAIL* (但不是EXPECT*和ADD_FAILURE*)。解决方法是将构造函数/析构函数的内容移动到私有的空成员函数,或者切换到EXPECT_*()。用户指南中的这一节对此进行了说明。
在使用ASSERT_*()宏的函数中,return类型必须为void。
发布于 2015-02-18 19:21:11
ASSERT_TRUE是一个宏。展开后,它将包含如下分支:
if (fun1() == false) {
return;
}这就是ASSERT_TRUE在失败时硬停下来的方式,但这也意味着你的方法bool abc::fun()现在有一个void返回退出路径,与它的签名冲突。
可能的修复包括不使用硬停止断言:
bool abc::fun(){
bool result = fun1();
EXPECT_TRUE(result); //No return in expansion
//No hard stop!
return result;
}如果不需要,也可以更改方法的返回类型:
void abc::fun(){
ASSERT_TRUE(fun1()); //Hard stop on failure
}或通过引用返回:
void abc::fun(bool &outResult){
outResult = fun1(); //return result by reference
ASSERT_TRUE(result);
}发布于 2012-09-27 17:10:15
fun方法有一个bool返回类型,所以它仍然需要return一些东西。
ASSERT_TRUE是一个宏,它测试某些东西是否为真,它不会为你调用return。实际上,您可以在一行中有多个ASSERT_TRUE,并且(如果它们都为真),它们都将一个接一个地执行。可以将ASSERT_TRUE宏看作是一个函数调用,尽管从技术上讲它不是。
这应该是可行的:
bool abc::fun()
{
ASSERT_TRUE(fun1());
return true;
}https://stackoverflow.com/questions/12617806
复制相似问题