IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

cpp et cppunit


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par d�faut cpp et cppunit
    onjour tout le monde.

    J'esp�re que quelqu'un pourra m'aider.

    ------------------------------------Context :
    j'ai commenc� � travailler sur les tests unitaires avec "cppunit"
    J'ai donc cr�� les fichiers "cppunit.cpp" et "cppunit.h" en me basant sur le
    cookbook du site "http://cppunit.sourceforge.net".

    ------------------------------------ERREURS :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    CPPUNIT.CPP
    cppunit.h(11) : warning C4508: 'Complex' : function should return a value; 'void' return type assumed
    cppunit.h(17) : error C2143: syntax error : missing ',' before '&'
    cppunit.h(17) : error C2059: syntax error : '&'
    cppunit.cpp(7) : error C2512: 'ComplexNumberTest' : no appropriate default constructor available
    Error executing cl.exe.
     
    CPPUNIT.OBJ - 3 error(s), 1 warning(s)
    ------------------------------------cppunit.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // fichier de tests unitaires
    #include <cppunit/ui/text/TestRunner.h>
    #include <cppunit/TextTestRunner.h>
    #include <cppunit/TestResult.h>
    #include <cppunit/CompilerOutputter.h>
    #include <cppunit/XmlOutputter.h>
    #include <cppunit/extensions/TestFactoryRegistry.h>
    #include <cppunit/extensions/HelperMacros.h>
    
    class Complex() {};
    
    class ComplexNumberTest : public CppUnit::TestCase { 
    public: 
      ComplexNumberTest( std::string name ) : CppUnit::TestCase( name ) {}
      bool operator==(const Complex &a, const Complex &b) { return true; }
      void runTest() {
        CPPUNIT_ASSERT( Complex (10, 1) == Complex (10, 1) );
        CPPUNIT_ASSERT( !(Complex (1, 1) == Complex (2, 2)) );
      }
    };
    ------------------------------------cppunit.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    // fichier de tests unitaires
     
    #include "cppunit.h"
     
    int main(void){
    	ComplexNumberTest mon_complex ;
    	return 0 ;
    }

  2. #2
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Ton probl�me est un probl�me de C++ et non un pb avec CppUnit. Les erreurs du compilateur sont assez explicites.
    Que viennent faire ces parenth�ses suivant le nom de la classe ? Le compilateur comprend que c'est une d�claration de fonction �rron�e.

    Comme la d�claration de la classe Complex n'est pas correcte, ce type n'existe pas dans la suite de la compilation d'o� les deux erreurs ligne 17 (operator==).

    La ligne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ComplexNumberTest mon_complex;
    fait appel � un constructeur de ComplexNumberTest qui ne prend aucun param�tre. Ce constructeur n'existe pas dans ce que tu as d�clar�. Le seul constructeur disponible requiert 2 param�tres.

    HTH

  3. #3
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Je crois que tout d�coule du premier warning...

    Tu d�clare une classe (class Complex) mais... tu utilise une signature de "fonction" (avec les parentheses qui suivent la d�claration de ta classe)...

    Le compilo, quand il rencontre un nom suivi de parenthese, il "pense" qu'il s'agit d'une fonction, et commence donc par t'indiquer qu'il faut un type de retour pour les fonctions...

    Comme tu n'a pas fournis de type de retour '(et pour cause: tu veux que ce soit une classe ) il t'indique que le type de retour "void" sera utilis� par d�faut (autrement dit qu'il s'agit d'une fonction qui ne renvoie rien... une proc�dure, si tu pr�f�res, meme s'il n'y a pas � proprement parler de proc�dures en C++)

    Mais du coup, cela signifie, surtout que, pour lui, Complex n'est pas une classe... mais une proc�dure

    Alors, ben, il parrait logique que la d�claration de ton operator== chagrine quelques peu le compilateur:

    Dans la parenthese, il s'attend � trouver quelque chose du genre de
    <qualificateur de constance/volatilit�> type <repr�sentation m�moire> nom_argument et il trouve, � la place... des noms de fonctions suivi de (au fait, ca pourrait etre quoi ), ce qui justifie les deux premi�res erreurs.

    Enfin, le constructeur "par d�faut" n'est rajout� par le compilateur que s'il n'y a aucun constructeur pr�vu par toi...

    Je m'explique:

    Consid�rons les trois classes suivantes.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    class Maclass
    {
        public:
            // je ne prévois aucun constructeur
            ~Maclass(){}
        (...)
    };
    class Monautreclasse
    {
        public:
            //je prévois un constructeur "personnalisé"
            monautreclasse(int var):_var(var){}
           ~monautreclasse(){}
           ...
    };
    class Matroisiemeclasse
    {
        public:
            //je prévois un constructeur "personnalisé"
            Matroisiemeclasse(int var):_var(var){}
            //je prévois un constructeur "par défaut"
            Matroisiemeclasse():_var(0){}
            ~Matroisiemeclasse(){}
            ...
    }
    Pour la premi�re, comme tu n'a pas pr�vu de constructeur, le compilateur en rajoute un "g�n�rique", et tu peux donc �crire un code ressemblant �
    Pour la deuxi�me, tu a d�clar� un constructeur personnalis�, et le compilateur n'a donc pas rajout� son constructeur "g�n�rique": le seul qu'il connaisse, c'est donc celui qui prend un entier comme parametre.

    On arrive donc � la situation que
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    Monautreclasse monobj1; // erreur: on n'a pas de parametre pour le
                             // constructeur
    Monautreclasse monobjet(3); // seule possiblité d'appeler le constructeur
    Et, enfin, pour la troisi�me classe, comme on a pr�vu un constructeur qui ne prend aucun parametre, on en arrive � la situation o�
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    Matroisiemeclasse monobj1;// OK monobj1._var vaut 0 par défaut
    Matroisiemeclasse monobj2(5);// OK monobj1._var vaut 5 grace au parametre
                                 // fourni
    Dans le code que tu pr�sente, tu te trouves dans le deuxi�me cas: il faut une chaine - pass�e en parametre - de mani�re � initialiser correctement ta classeComplexNumberTest.

    Tu disposes donc de deux possiblit�s "parallelles", qui te permettront d'arriver au bon r�sultat:

    Soit, tu pr�vois un constructeur par d�faut comme par exemple
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ComplexNumberTest( ) : CppUnit::TestCase( "unnammed_complex" ) {}
    soit, tu pr�vois une valeur par d�faut pour la chaine sous la forme de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ComplexNumberTest( std::string name="unnamed_complex") : CppUnit::TestCase( name ) {}
    Dans les deux cas, il sera possible d'intialiser ton ComplexNumberTest sans devoir lui fournir de parametre

    Nota: Enfin, il faut etre attentif au fait qu'il est tr�s largement conseill� d'utiliser une r�f�rence constante sur une chaine pass�e en parametre...
    Le constructeur serait bien mieux sous la forme de
    ComplexNumberTest( const std::string &name ) : CppUnit::TestCase( name ) {}
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par d�faut Je prend note
    Bonjour.

    Pous la classe avec les parenth�se, j'ais vu, oui.
    Pour le reste, je vais voir �a.
    En tout cas, merci pour votre aide.

    A demain (pour dire que c'est r�solu je pense).

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par d�faut L'op�rateur "=="
    ---------------------------------------contexte
    Voir premier message.
    J'ai toujours le probl�me sur l'op�rateur qui persiste.
    "trop de param�tres", je veux bien. Mais j'ai deux param�tres partout.

    ---------------------------------------compilation
    CPPUNIT.CPP
    cppunit.h(22) : error C2804: binary 'operator ==' has too many parameters
    Error executing cl.exe.

    CPPUNIT.OBJ - 1 error(s), 0 warning(s)

    Voici tous les endroits o� j'utilise l'op�rateur :

    ---------------------------------------cppunit.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    bool operator ==( const Complex &a, const Complex &b )
    { 
      return (a.real == b.real)  &&  (a.imaginary == b.imaginary); 
    }
    ---------------------------------------cppunit.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class Complex {
      friend bool operator ==(const Complex& a, const Complex& b);
      double real, imaginary;
    public:
      Complex( double r, double i = 0 ) : real(r) , imaginary(i) {}
    };
    
    
    class ComplexNumberTest : public CppUnit::TestCase { 
    public: 
      ComplexNumberTest( const std::string &name ) : CppUnit::TestCase( name ) {};
      bool operator==(const Complex &a, const Complex &b);
      void runTest() {
        CPPUNIT_ASSERT( Complex (10, 1) == Complex (10, 1) );
        CPPUNIT_ASSERT( !(Complex (1, 1) == Complex (2, 2)) );
      }
    };

  6. #6
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Fais le libre et pas membre d'une classe qui n'a rien � voir.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par d�faut probl�me r�solu - merci
    probl�me r�solu - merci.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [dev-cpp] probleme de link
    Par alex1er dans le forum Dev-C++
    R�ponses: 5
    Dernier message: 20/01/2005, 17h41
  2. Mysql++ et dev-cpp..
    Par MrPomme dans le forum Windows
    R�ponses: 4
    Dernier message: 03/08/2004, 14h50
  3. probleme avec d3dsettings.cpp
    Par bakonu dans le forum DirectX
    R�ponses: 0
    Dernier message: 03/03/2004, 21h33
  4. compilation directx dev-cpp
    Par gaut dans le forum DirectX
    R�ponses: 3
    Dernier message: 11/02/2004, 04h16
  5. creation DLL dev-cpp
    Par gaut dans le forum Dev-C++
    R�ponses: 4
    Dernier message: 29/01/2004, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo