[英]ASSERT_TRUE() return type does not match function type in gtest
當我使用ASSERT_TRUE()
提供了Gtest
我得到下面的錯誤。 return type does not match function type
與VS 2010.
的下划線return type does not match function type
。
#include "gtest\gtest.h"
class abc {
pubilc:
bool fun();
private:
bool fun1();
};
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
}
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);
}
fun()
沒有指定return
語句,但返回bool
。 添加return false;
或者return true;
to fun()
或將其返回類型更改為void
:
void abc::fun()
{
ASSERT_TRUE(fun1());
}
基於My編譯器抱怨構造函數(或析構函數)無法返回值。 這是怎么回事? 哪個州(逐字):
由於C ++的特殊性,為了支持將消息流式傳輸到ASSERT_ *的語法,例如
ASSERT_EQ(1, Foo()) << "blah blah" << foo;
我們不得不放棄在構造函數和析構函數中使用ASSERT *和FAIL *(但不是EXPECT *和ADD_FAILURE *)。 解決方法是將構造函數/析構函數的內容移動到私有void成員函數,或者如果可行則切換到EXPECT _ *()。 用戶指南中的這一部分對其進行了解釋。
在使用ASSERT_*()
宏的函數中, return
類型必須為void
。
fun
方法有一個bool
返回類型,所以它仍然需要return
一些東西。
ASSERT_TRUE
是一個測試某些東西是真的宏,它不會為你調用return。 事實上,你可以連續擁有多個ASSERT_TRUE
,並且(只要它們都是真的)它們將一個接一個地執行。 將ASSERT_TRUE
宏視為函數調用,即使它不是技術上的。
這應該工作:
bool abc::fun()
{
ASSERT_TRUE(fun1());
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.