ASSERT_TRUE() le type de retour ne correspond pas à la fonction de type de gtest
Quand je suis en utilisant ASSERT_TRUE()
fourni dans Gtest
je suis d'erreur ci-dessous.
return type does not match function type
avec un soulignement dans 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
}
OriginalL'auteur Rasmi Ranjan Nayak | 2012-09-27
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de
return
déclaration spécifiée dansfun()
mais elle renvoie unebool
. Ajouter unreturn false;
oureturn true;
àfun()
ou de changer son type de retour devoid
:Basé sur Mon compilateur se plaint qu'un constructeur (ou destructeur) ne peut pas retourner de valeur. Ce qui se passe? qui stipule (textuellement):
la
return
type doit êtrevoid
dans les fonctions qui utilisent desASSERT_*()
macros.return true
oufalse
àfun
c'est en jetant les mêmeserror
. Mais en faisantvoid
il fonctionne très bien. Mais je voudraisreturn
. Alors comment faire.Si vous supprimez le
ASSERT_TRUE(fun1());
et ont simplementreturn true;
t-il compiler?Oui, il ne compile bien avec seulement
return true
mise à jour de réponse.
Je pense que vous avez raison. Mon compilateur est aussi de lancer la même erreur que
cannot convert from 'void' to 'BOOL'
. Donc, doit avoir besoin d'utiliservoid
au lieu deBOOL or etc
OriginalL'auteur hmjd
ASSERT_TRUE
est une macro. Une fois dépliée, elle contiendra une branche comme:C'est de cette façon
ASSERT_TRUE
fait un arrêt sur l'échec, mais il signifie également que votre méthodebool abc::fun()
a maintenant unvoid
retour de chemin de sortie de, en conflit avec sa signature.Des correctifs possibles comprennent ne pas utiliser de l'arrêt affirme:
ou modifier vos méthodes de type de retour si pas nécessaire:
ou de retour de référence:
OriginalL'auteur Downward Facing God
La
fun
méthode a unbool
type de retour de sorte qu'il doit encorereturn
quelque chose.ASSERT_TRUE
est une macro qui teste que quelque chose est vrai, il ne sera pas de retour d'appel pour vous. En fait, vous pouvez avoir beaucoup deASSERT_TRUE
dans une rangée, et (s'ils sont tous les vrais), elles s'exécutent l'une après l'autre. Pensez à laASSERT_TRUE
macro comme un appel de fonction, même si elle n'est pas techniquement.Cela devrait fonctionner:
error
.Je ne pense pas que c'est correct;
ASSERT_TRUE
se développe dans code qui renvoie lorsque la condition est false. Il abandonne le test.OriginalL'auteur Adam M-W