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 147
    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 147
    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 147
    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 147
    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