簡體   English   中英

ASSERT_TRUE()返回類型與gtest中的函數類型不匹配

[英]ASSERT_TRUE() return type does not match function type in gtest

當我使用ASSERT_TRUE()提供了Gtest我得到下面的錯誤。 return type does not match function typeVS 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
}

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM