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

Autres éditeurs Discussion :

definition de type non reconnu par g++ ou erreur?


Sujet :

Autres éditeurs

  1. #1
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut definition de type non reconnu par g++ ou erreur?
    Bonjour,

    Jusqu a present, mon code compilé sous visual sans souci... le passage a g++ est tout autre. J aurais donc besoin de vos lumieres pour savoir si l erreur vient de moins et du laxisme de Visual.

    Voila donc une partie de mon .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
     
    typedef techsoft::matrix<double> dMatrix;
    typedef std::valarray<double> dVector;
     
    class Tensor
    {
    public:
    	Tensor ();
    	Tensor (dMatrix &val, int x, int y, int z);
    	(...)
    private:
    	int _x, _y, _z;
    	dMatrix _val;
            (...)
    };
    La partie concernée de mon .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Tensor
    Tensor::operator+ (const Tensor & T)
    {
    	Tensor *res = new Tensor (_val + T._val, _x, _y, _z); 
    	return *res;
    }
    et l'erreur rejetée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Tensor.cpp: In member function `Tensor Tensor::operator+(const Tensor&)':
    Tensor.cpp:28: error: no matching function for call to `Tensor::Tensor(techsoft::matrix<double>, int&, int&, int&)'
    Tensor.h:16: note: candidates are: Tensor::Tensor(const Tensor&)
    Tensor.cpp:14: note:                 Tensor::Tensor(dMatrix&, int, int, int)
    Tensor.cpp:3: note:                 Tensor::Tensor()
    Avant de poser une question, lire la Avant de répondre, lire la question

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Tu essaies de passer un temporaire a une reference non constante. g++ a raison de refuser.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    _val + T._val n'a rien de temporaire (l'operateur + de la lib utilisée crée bien une nouvelle matrice)...
    Avant de poser une question, lire la Avant de répondre, lire la question

  4. #4
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    En revanche, ce code compile sans probleme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Tensor
    Tensor::operator+ (const Tensor & T)
    {
      dMatrix tmp (3, 3);
      tmp = _val + T._val; 
      Tensor *res = new Tensor (tmp, _x, _y, _z); 
     
      return *res;
    }


    Je n'ai peut etre pas bien saisi la remarque de Jean Marc B... alors si j'ai repondu a cote, expliquez moi... Car effectivement si je met un const dans mon constructeur ca compile...

    Merci
    Avant de poser une question, lire la Avant de répondre, lire la question

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par harsh
    _val + T._val n'a rien de temporaire (l'operateur + de la lib utilisée crée bien une nouvelle matrice)...
    Et le retourne par valeur je suppose. Donc c'est un temporaire.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par harsh
    Car effectivement si je met un const dans mon constructeur ca compile...
    Quand une fonction demande une reference constante on peut lui passer un temporaire.

    Quand une fonction demande une reference non constante, on ne peut pas.

    Pour les types definis par l'utilisateur, les temporaires sont formes par des fonctions (et des operateurs) ayant une valeur comme resultat.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par harsh
    En revanche, ce code compile sans probleme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Tensor
    Tensor::operator+ (const Tensor & T)
    {
      dMatrix tmp (3, 3);
      tmp = _val + T._val; 
      Tensor *res = new Tensor (tmp, _x, _y, _z); 
     
      return *res;
    }


    Je n'ai peut etre pas bien saisi la remarque de Jean Marc B... alors si j'ai repondu a cote, expliquez moi... Car effectivement si je met un const dans mon constructeur ca compile...

    Merci
    Avec une belle fuite mémoire comme conséquence...

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Bonsoir ,

    Pourquoi ne pas essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Tensor
    Tensor::operator+ (const Tensor & T)
    {
      dMatrix tmp (3, 3);
      tmp = _val + T._val; 
      Tensor res (tmp, _x, _y, _z); 
     
      return res;
    }
    Cordialement.

Discussions similaires

  1. [VBA] Type non défini par l'utilisateur.
    Par ip203 dans le forum Access
    Réponses: 5
    Dernier message: 07/04/2008, 14h38
  2. fichier .cc non reconnu par VC++
    Par xanax dans le forum MFC
    Réponses: 4
    Dernier message: 15/05/2006, 15h13
  3. Antivirus non reconnu par centre de sécurité
    Par shukin dans le forum Windows XP
    Réponses: 8
    Dernier message: 04/04/2006, 15h22
  4. [API]JTAPI non reconnu par eclipse
    Par julio84 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 15/04/2005, 14h03
  5. [Lomboz] [JBoss] JBoss 3.2.6 non reconnu par Lomboz ?
    Par romain3395 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 17/12/2004, 16h35

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