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 :

probleme pour créer un operator%


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Par défaut probleme pour créer un operator%
    Bonjour je debute en C++ et là depuis deux jours je traine sur une classe vecteur car quand je lance la compilation il me renvoit l'erreur ci-dessous
    g++ -c vecteur.cpp main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    **main.cpp: In function ‘int main(int, char**)’:
    main.cpp:12: error: no match foroperator=’ in ‘V4 = V1.vecteur::operator%(((const vecteur&)((const vecteur*)(& V2))))’
    vecteur.h:17: note: candidates are: vecteur& vecteur::operator=(const vecteur&)**
    ci dessous mes trois fichiers ""main.cpp; vecteur.cpp; vecteur.h"
    main.cpp
    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
    #include"vecteur.h"
    #include<iostream>
    #include<string>
     
    using namespace std;
     
    int main(int argc, char *argv[]){
    	vecteur V1(14,12,8);
    	vecteur	V2(-15,4,25);
    	vecteur V3,V4,V5;
    	V3 = V1+V2;
    	V4 = V1 % V2;
    	V5 = V1^V2;
    	cout <<"( "<<V1<<" ) + ( "<<V2<< ")  ( "<<V3<< " )"<< endl;
    	cout <<"( "<<V1<<" ) % ( "<<V2<< ")  ( "<<V4<< " )"<< endl;
    	cout <<"( "<<V1<<" ) ^ ( "<<V2<< ")  ( "<<V5<< " )"<< endl;
    	return 0;
    }
    vecteur.cpp
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #include"vecteur.h"
    #include<iostream>
    #include<string>
     
    using namespace std;
    //static nb_pts=0;
    vecteur::vecteur(double a, double b, double c){
    x=a;y=b;z=c;
    //nb_pts++
    }
    vecteur& vecteur::operator=(vecteur const& v){
    	this->x=v.x;
    	this->y=v.y;
    	this->z=v.z;
    	return *this;
    }
    vecteur::vecteur(vecteur const& v){
    	this->x=v.x;
    	this->y=v.y;
    	this->z=v.z;
    }
     
     
     
    vecteur::~vecteur(){
    //nb_pt--;
    }
     
    vecteur vecteur::operator+(vecteur const& v){
    	vecteur u;
    	u.x=v.x+this->x;
    	u.y=v.y+this->y;
    	u.z=v.z+this->z;
    	return u;
    }
     
     
    vecteur& vecteur::operator+=(vecteur const& v){
    	this->x+=v.x;//(*this)+=*this+v;
    	this->y+=v.y;
    	this->z+=v.z;
    	return *this;
    }
     
    bool vecteur::operator==(vecteur const& v){
    	return (this->x==v.x && this->y==v.y && this->z==v.z);
    }
     
    double vecteur::operator%(vecteur const& v){
    	//double res;
    	return (this->x*v.x+this->y*v.y+this->z*v.z);
    	//return res;
    }
     
    vecteur& vecteur::operator^(vecteur const& v){
    	this->x=(this->y*v.z)-(this->z*v.y);
    	this->y=(-this->x*v.z)+(v.x*this->z);
    	this->z=(this->x*v.y)-(v.x*this->y);
    	return *this;
    }
     
    bool vecteur::operator||(vecteur const& v){
    	vecteur temp;
    	temp.x=(this->y*v.z)-(this->z*v.y);
    	temp.y=(-this->x*v.z)+(v.x*this->z);
    	temp.z=(this->x*v.y)-(v.x*this->y);
    	//temp=this->x.operator^(v);
    	return (temp.x==v.x && temp.y==v.y && temp.z==v.z);
    }
     
    //Affichage
     
    void vecteur::affiche(ostream& flux) const{
    flux << x <<" , " <<y<<" , "<<z<<" , "<<endl;
    }
     
    //operateur d'injection de flux
    ostream& operator<<(ostream& flux, vecteur const& vec){
    	vec.affiche(flux);
    	return flux;
    }
    vecteur.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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #ifndef DEF_VECTEUR 
    #define DEF_VECTEUR
     
    #include<iostream>
    #include<string>
     
    class vecteur{
    	private:
    	double x,y,z;
    	//int static nb_pts;
    	public:
    	//constructeurs 
    	vecteur();
    	vecteur(double x,double y,double z);
    	vecteur(vecteur const& v);
    //operateur arithmetique
    vecteur& operator=(vecteur const& v);
    double   operator%(vecteur const& v);
    vecteur& operator^(vecteur const& v);
    vecteur	 operator+(vecteur const& v);
    vecteur& operator+=(vecteur const& v);
    bool	operator||(vecteur const& v);
     
    //operateur de comparaison
    bool	 operator==(vecteur const& v);
     
    //bool	 operator||(vecteur const& v);
     
     
    //affichage
    void	affiche(std::ostream& flux) const;
    	~vecteur();
    };
     
    //Opérateur d'injection dans un flux
    std::ostream& operator<<(std::ostream& flux, vecteur const& vec);
     
    #endif

  2. #2
    Membre expérimenté Avatar de Dalini71
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 181
    Par défaut
    Bonjour,

    Dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // ...
    double   operator%(vecteur const& v);
    // ...
    V4 = V1 % V2;
    Comme on peut le voir, V1 % V2 va te renvoyer un double, et toi tu tentes de l'affecter à ton vecteur, ce qui n'est pas possible (ou alors il faudrait que tu surcharges l'opérateur =).

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Par défaut
    Merci pour ta remarque justement quand tu le dit je me rend compte de mon erreur pour y remedier vu que le type de retour est un "double et non un type vecteur j'ai modirer le type de la variable V4 en double et là le linkage à fontionner (g++ -c vecteur.cpp main.cpp) mais lorsque j'essaie de compiler le fichier vecteur.o generer j'ai l'erreur ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /usr/lib/gcc/i486-linux-gnu/4.4.5/../../../../lib/crt1.o: In function `_start':
    (.text+0x18): undefined reference to `main'
    vecteur.o: In function `vecteur::operator+(vecteur const&)':
    vecteur.cpp:(.text+0x122): undefined reference to `vecteur::vecteur()'
    vecteur.o: In function `vecteur::operator||(vecteur const&)':
    vecteur.cpp:(.text+0x2b0): undefined reference to `vecteur::vecteur()'
    collect2: ld returned 1 exit status
    que faire dans ce cas!!!!!!!
    Merci pour ton aide

  4. #4
    Membre expérimenté Avatar de Dalini71
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 181
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vecteur.cpp:(.text+0x122): undefined reference to `vecteur::vecteur()
    Tu as bien déclaré le prototype de ton constructeur par défaut, mais tu ne l'as pas implémenté, donc forcément ça plante

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Par défaut
    je l'ai implementer après linkage et compilation j'ai l'erreur ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /usr/lib/gcc/i486-linux-gnu/4.4.5/../../../../lib/crt1.o: In function `_start':
    (.text+0x18): undefined reference to `main'
    collect2: ld returned 1 exit status
    Merci pour ton aide

  6. #6
    Membre expérimenté Avatar de Dalini71
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 181
    Par défaut
    J'ai copié-collé ton code est ça marche chez moi.

    Ca marche pas avec genre g++ main.cpp vecteur.cpp ?

Discussions similaires

  1. [Spring 2.1]Probleme pour créer ma beanFactory
    Par Shogun dans le forum Spring
    Réponses: 4
    Dernier message: 10/03/2008, 14h32
  2. Réponses: 3
    Dernier message: 17/11/2006, 14h35
  3. [WinForms]Probleme pour créer le setup
    Par rafou28 dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 13/09/2006, 16h26
  4. Probleme pour créer un base de données...
    Par _matt_44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 03/06/2005, 14h36

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