9

ASSERT_TRUE()提供されたものを使用するGtestと、以下のエラーが発生します。 return type does not match function typeに下線を付けVS 2010.ます。

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
}
4

3 に答える 3

23

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);
}
于 2015-02-18T11:21:10.630 に答える