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 :

Erreur lors de la compilation des m�thodes d'une classe


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2017
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2017
    Messages : 9
    Par d�faut Erreur lors de la compilation des m�thodes d'une classe
    Bonjour,

    j'ai quelques erreurs je suis rest� tellement longtemps dessus que j'ai d�cid� de m'inscrire sur le site pour avoir un peu d'aide. Merci d'avance.

    Alors je vous montre d'une part le code du main :

    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
    #include "matrice.hpp"
    #include <iostream>
    #include <cmath>
     
    int main() {
    	unsigned int N=4;
    	std::vector<double> V(N,2.);
    	Matrice A(N,1), B(V) , C(N);
     
    	C=A+B;
     
    	//C(3,2)=7.0;
     
    	std::cout<<"La matrice C est : "<<C<<std::endl;
    	std::cout<<" Sa taille est : "<<C.taille();
    	std::cout<<"Sa trace est : "<<C.taille();
     
    	return 0;
     
    }
    Ma classe :
    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
    #include <vector>
    #include <iostream>
     
    class Matrice {
    	private:
    	int N;
    	std::vector<double> coeff;
     
    	public:
     
    	int taille() const; 
    	double trace() const;
    	 friend Matrice & operator+(Matrice & , Matrice &);
    	//double & operator() (int, int);
     
     
    	Matrice(const std::vector<double> &);
    	Matrice(int, double x=0);
    };
    Matrice & operator+(Matrice & , Matrice &);
    Ainsi que le code des m�thodes :
    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
    #include "matrice.hpp"
    #include <vector>
    #include <iostream>
     
     
     
    int Matrice::taille() const {
     
    	return N; //on aurait pu ici le mettre en inline)
     
    }
     
    //double Matrice::operator() (int i, int j) {
    	//double k;
    	//k=coeff[N*i+j];
     
    	//return k;
     
    //}
     
     int Matrice::trace() const {
    	double t=0;
    	for (int i=0; i<N; i++)
     
    	{t=t+ coeff[N*i+i]; }
     
    	return t;
    }
     
    Matrice& operator+(Matrice & A, Matrice & B) {  
    	std::vector<double> T((N-1)*(N-1));
    	for (int i=0; i<=(N-1)*(N-1);i++) {
    		for (int j=0; j<=(N-1)*(N-1);j++) {
    			T[N*i + j]= A[N*i+j] + B[n*i+j];
     
    		}
    		}
    		return T;
    }
     
     
    //on a fait les accesseurs on fait maintenant les constructeurs.
     
     
    Matrice::Matrice (int p, double x):N(p), coeff(p*p,x) {}
     
    Matrice::Matrice(const std::vector <double> & V):N(V.size()), coeff(V.size()*V.size(),0) {
     
    	for (int i = 0; i<N;i++)
    	{coeff [N*i+i]=V[i];}
     
    }

    J'ai des erreurs du type :
    matrice.cpp:21:6: error: prototype for �int Matrice::trace() const� does not match any in class �Matrice�
    int Matrice::trace() const {
    ^
    In file included from matrice.cpp:1:0:
    matrice.hpp:12:9: error: candidate is: double Matrice::trace() const
    double trace() const;
    ^
    matrice.cpp: In function �Matrice& operator+(Matrice&, Matrice&)�:
    matrice.cpp:31:25: error: �N� was not declared in this scope
    std::vector<double> T((N-1)*(N-1));
    ^
    matrice.cpp:34:29: error: �n� was not declared in this scope
    T[N*i + j]= A[N*i+j] + B[n*i+j];
    ^
    matrice.cpp:38:10: error: invalid initialization of non-const reference of type �Matrice&� from an rvalue of type �Matrice�
    return T;
    ^
    In file included from matrice.cpp:1:0:
    matrice.hpp:17:2: note: after user-defined conversion: Matrice::Matrice(const std::vector<double>&)
    Matrice(const std::vector<double> &);
    ^


    J'aimerais bien qu'on m'aide, merci beaucoup en tout cas.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par d�faut
    La premi�re, j'�lague un peu le message pour t'aider :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    error: prototype forint Matrice::trace() const’ does not match any in class ‘Matrice’
           candidate is: double Matrice::trace() const
    C'est assez clair, non ? Relis bien.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    matrice.cpp: In function ‘Matrice& operator+(Matrice&, Matrice&)’:
    matrice.cpp:31:25: error: ‘N’ was not declared in this scope
    std::vector<double> T((N-1)*(N-1));
    ^
    Cette fonction n'est pas d�finie comme m�thode de la classe, il te manque un Matrice::.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    matrice.cpp:34:29: error: ‘n’ was not declared in this scope
    T[N*i + j]= A[N*i+j] + B[n*i+j];
    ^
    Celle-ci, je pense que tu peux la trouver tout seul.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    matrice.cpp:38:10: error: invalid initialization of non-const reference of type ‘Matrice&’ from an rvalue of type ‘Matrice’
    return T;
    ^
    In file included from matrice.cpp:1:0:
    matrice.hpp:17:2: note: after user-defined conversion: Matrice::Matrice(const std::vector<double>&)
    Matrice(const std::vector<double> &);
    La fonction retourne une r�f�rence vers un objet � port�e locale. Le type de retour devrait �tre Matrice.

  3. #3
    Membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2017
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2017
    Messages : 9
    Par d�faut
    Merci beaucoup j'ai plus qu'une erreur apres avoir corrig� mais c'est une erreur que je n'avais pas aussi pu resoudre...

    Le code corrig� :

    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
    #include "matrice.hpp"
    #include <vector>
    #include <iostream>
     
     
     
    int Matrice::taille() const {
     
    	return N; //on aurait pu ici le mettre en inline)
     
    }
     
    //double Matrice::operator() (int i, int j) {
    	//double k;
    	//k=coeff[N*i+j];
     
    	//return k;
     
    //}
     
     double Matrice::trace() const {
    	double t=0;
    	for (int i=0; i<N; i++)
     
    	{t=t+ coeff[N*i+i]; }
     
    	return t;
    }
     
    Matrice Matrice::operator+(Matrice & A, Matrice & B) {  
    	std::vector<double> T((N-1)*(N-1));
    	for (int i=0; i<=(N-1)*(N-1);i++) {
    		for (int j=0; j<=(N-1)*(N-1);j++) {
    			T[N*i + j]= A[N*i+j] + B[N*i+j];
     
     
    		}
    		return T;
    }
     
     
    //on a fait les accesseurs on fait maintenant les constructeurs.
     
     
    Matrice::Matrice (int p, double x):N(p), coeff(p*p,x) {}
     
    Matrice::Matrice(const std::vector <double> & V):N(V.size()), coeff(V.size()*V.size(),0) {
     
    	for (int i = 0; i<N;i++)
    	{coeff [N*i+i]=V[i];}
     
    }

    du coup la fameuse erreur :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    ~/Bureau/Premiereclasse$ g++ -c matrice.cpp
    matrice.cpp:30:52: error: ‘Matrice Matrice::operator+(Matrice&, Matrice&)’ must take either zero or one argument
     Matrice Matrice::operator+(Matrice & A, Matrice & B) {  
                                                        ^

    Je dois peut �tre mettre �a plut�t en fonction car je devrais pas avoir deux argument mais un ? ou alors je fais une m�thode avec un argument et dans le code je fais appel a une autre variable du type Matrice ?

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Un op�rateur + membre prend aucun ou 1 argument comme le message le dit tr�s clairement.
    Si c'est membre, y'a this et donc un op�rande implicite.
    https://en.wikipedia.org/wiki/Operat..._C_and_C%2B%2B
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  5. #5
    Membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2017
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2017
    Messages : 9
    Par d�faut
    J'ai donc cr�e la methode avec un argument mais un autre probleme persiste... Merci


    La class :
    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
    #include <vector>
    #include <iostream>
     
    class Matrice {
    	private:
    	int N;
    	std::vector<double> coeff;
     
    	public:
     
    	int taille() const; 
    	double trace() const;
    	 Matrice operator+(Matrice &);
    	//double & operator() (int, int);
     
     
    	Matrice(const std::vector<double> &);
    	Matrice(int, double x=0);
    };
    Matrice & operator+(Matrice &);
    voici le code des m�thodes
    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
    #include "matrice.hpp"
    #include <vector>
    #include <iostream>
     
     
     
    int Matrice::taille() const {
     
    	return N; //on aurait pu ici le mettre en inline)
     
    }
     
    //double Matrice::operator() (int i, int j) {
    	//double k;
    	//k=coeff[N*i+j];
     
    	//return k;
     
    //}
     
     double Matrice::trace() const {
    	double t=0;
    	for (int i=0; i<N; i++)
     
    	{t=t+ coeff[N*i+i]; }
     
    	return t;
    }
     
    Matrice Matrice::operator+(Matrice & A) {  
    	std::vector<double> T((N-1)*(N-1));
    	for (int i=0; i<=(N-1)*(N-1);i++) {
    		for (int j=0; j<=(N-1)*(N-1);j++) {
    			T[N*i+j]= A[N*i+j] + coeff[N*i+j];
     
    	}
    		return T;
    }
    }
     
     
    //on a fait les accesseurs on fait maintenant les constructeurs.
     
     
    Matrice::Matrice (int p, double x):N(p), coeff(p*p,x) {}
     
    Matrice::Matrice(const std::vector <double> & V):N(V.size()), coeff(V.size()*V.size(),0) {
     
    	for (int i = 0; i<N;i++)
    	{coeff [N*i+i]=V[i];}
     
    }

    La nouvelle erreur
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    matrice.cpp: In member function ‘Matrice Matrice::operator+(Matrice&)’:
    matrice.cpp:34:17: error: no match foroperator[](operand types are ‘Matrice’ andint)
        T[N*i + j]= A[N*i+j] + coeff[N*i+j];
                     ^

    Merci.

  6. #6
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Un moment donn� il faut r�fl�chir et pas tester n'importe quoi en esp�rant qu'on te serve la solution...
    A est un Matrice, o� tu as vu que tu pouvais utiliser l'op�rateur [] sur ton type Matrice ?
    Encore une fois, lis tes messages d'erreur. Ou bien l'anglais est un tel probl�me ?
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

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

Discussions similaires

  1. Erreur lors de l'appel des m�thodes d'un WebService
    Par jof8dev dans le forum Services Web
    R�ponses: 2
    Dernier message: 03/08/2012, 12h15
  2. message d'erreur lors de la compil des pages JSP
    Par pcouas dans le forum Jasper
    R�ponses: 0
    Dernier message: 06/08/2008, 16h30
  3. R�ponses: 14
    Dernier message: 08/04/2008, 16h42
  4. R�ponses: 7
    Dernier message: 28/12/2007, 23h08

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