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

Langage C++ Discussion :

Symbole externe non résolu


Sujet :

Langage C++

  1. #1
    Membre confirmé

    Homme Profil pro
    Étudiant Réseaux et Télécoms
    Inscrit en
    Octobre 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant Réseaux et Télécoms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 121
    Par défaut Symbole externe non résolu
    Bonjour à tous,

    J'ai un problème lors de la compilation de mon code, j'ai comme erreur :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	1	error LNK2019: symbole externe non résolu "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Calcul<int> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$Calcul@H@@@Z) référencé dans la fonction _main	c:\Users\Nicolas\documents\visual studio 2012\Projects\POO2012\POO2012_correction_ex2\Main.obj	POO2012_correction_ex2
    Voici mes deux fichiers :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #pragma once
    #include <iostream>
     
    using namespace std;
     
    template <class T>
    class Calcul {
    private :
    	T val;
    	static int valDefaut;
     
    public :
     
    	Calcul(const Calcul& c);
    	Calcul(T v = valDefaut);
    	Calcul Nplus(T n) const;
    	Calcul& plus(T n);
    	T valeur() const;
    	friend ostream& operator<<(ostream& os, const Calcul& calcul);
    };
     
    template <class T>
    int Calcul<T>::valDefaut = 0;
     
    template <class T>
    ostream& operator<<(ostream& os, const Calcul<T>& calcul){
    	os << calcul.val;
    	return os;
    }
     
    template <class T>
    Calcul<T>::Calcul(const Calcul& c){
    	val = c.valeur();
    	cout << "Constructeur Calcul(Calcul&)" << endl;
    }
     
    template <class T>
    Calcul<T>::Calcul(T v){
    	val = v;
    	cout << "Constructeur Calcul(T)" << endl;
    }
     
    template <class T>
    Calcul<T> Calcul<T>::Nplus(T n) const{
    	Calcul<T> tmp(n + valeur());
    	return tmp;
    }
     
    template <class T>
    Calcul<T>& Calcul<T>::plus(T n){
    	val += n;
    	return (*this);
    }
     
    template <class T>
    inline T Calcul<T>::valeur() const{
    	return val;
    }
    Calcul.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
    21
    22
    23
    24
    25
    #include "Calcul.h"
     
    int main(int argc, char* argv[]){
     
    	Calcul<int> a;
    	Calcul<int> t;
     
    	cout << "a: " << a << endl;
    	cout << "t: " << t << endl << endl;
     
    	a = t.plus(1).plus(1);
    	cout << "a: " << a << endl;
    	cout << "t: " << t << endl << endl;
     
    	a = t.Nplus(1).Nplus(1);
    	cout << "a: " << a << endl;
    	cout << "t: " << t << endl << endl;
     
    	a = t.plus(1).Nplus(1);
    	cout << "a: " << a << endl;
    	cout << "t: " << t << endl << endl;
     
    	system("pause");
    	return 0;
    }
    Main.cpp

    Merci beaucoup de votre aide.

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    une remarque importante:

    Il est très fortement déconseillé d'utiliser une directive using namespace dans un .h

    ensuite la signature de l’opérateur de stream dans la classe n'est pas cohérente avec celle de l'implémentation quelques lignes plus bas.

    Une des solutions possible est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    template <class T>
    class Calcul
    ...
    	template <typename U>
    	friend std::ostream& operator<< (std::ostream& os, const Calcul<U>& calcul);
     
    };
     
    template <typename U>
    std::ostream& operator<<(std::ostream& os, const Calcul<U>& calcul){
      os << calcul.val;
      return os;
    }
    Cela marche chez moi avec G++

Discussions similaires

  1. error LNK2019: symbole externe non résolu
    Par bugmenot dans le forum Visual C++
    Réponses: 6
    Dernier message: 24/11/2009, 01h02
  2. pb : symbole externe non résolu
    Par sheepman dans le forum Windows
    Réponses: 2
    Dernier message: 12/04/2007, 10h38
  3. Réponses: 3
    Dernier message: 06/08/2006, 18h17
  4. LNK2019: symbole externe non résolu __ftol2_sse
    Par ellipse dans le forum MFC
    Réponses: 1
    Dernier message: 26/04/2006, 23h48
  5. LNK2019 symbole externe non résolu
    Par devmat dans le forum MFC
    Réponses: 3
    Dernier message: 04/01/2006, 00h14

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