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 à la compilation


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut erreur à la compilation
    Bonjour, j'ai les classes suivantes :

    walidSol.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
     
    #ifndef WALIDSOL_H_20100912_PLP_
    #define WALIDSOL_H_20100912_PLP_
     
    #include <vector>
    #include <ostream>
     
    class WalidSol
    {
    public :
    	WalidSol() {}
    	WalidSol(const std::vector<int> sol,double err,double taille) : _sol(sol), _err(err), _taille(taille) {}
    	~WalidSol() {}
     
    	// getters
    	const std::vector<int> & getSol() const { return _sol; }
    	const double & getErr() const { return _err; }
    	const double & getTaille()  const { return _taille; }
     
    	// setters
    	void setSol(const std::vector<int> & sol) { _sol = sol; }
    	void setErr(double err) { _err = err; }
    	void setTaille(double taille) { _taille = taille; }
     
    	// ecriture de la classe WalidSol dans le flux os
    	std::ostream & print(std::ostream & os) const;
     
    	friend std::ostream & operator << (std::ostream & os,const WalidSol & w) { return w.print(os); }
     
    private :
    	std::vector<int> _sol;    // quantite de chacun des motifs dans le secteur
    	double           _err;    // marge d'erreur calculee pour la solution _sol
    	double           _taille; // taille de la solution trouvee
    };
     
     
    #endif
    Walid.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
    40
    41
    42
    43
     
    #ifndef WALID_H_20100909_PLP_
    #define WALID_H_20100909_PLP_
     
    #include <vector>
    #include "WalidSol.h"
     
    class Walid
    {
    public :
    	Walid(double tailleSect, double marge, const std::vector<double> & tailleMotif);
    	~Walid() {}
     
    	// getters
    	std::vector<WalidSol> & getSol() const { return _sol; }
    	const std::vector<int> & getNbMotifMax() const { return _nMotifMax; }
    	const double & getTailleSect() const { return _tailleSect; }
    	const double & getMarge() const { return _marge; }
    	const size_t getNbSol() const { return _sol.size(); } // nombre de solutions trouvees	
     
    	// lancement du calcul
    	void run();
     
    private :
    	double                _tailleSect;   // taille du secteur
    	double                _marge;        // marge d'erreur autorisee
    	std::vector<double>   _tailleMotif;  // taille de chacun des motifs
    	std::vector<int>      _nMotif;       // quantite de chacun des motifs dans le secteur
    	std::vector<int>      _nMotifMax;    // quantite maximale de chacun des motifs dans le secteur
    	size_t                _n;            // longueur du tableau _nMotif
    	size_t                _nm1;          // _n - 1
    	bool                  _ok;
    	std::vector<WalidSol> _sol;          // les solutions trouvees	
     
    	void updateIndex(int numMotif);
     
    	// calcul de la taille de l'ensemble des motifs
    	double tailleTotale(const std::vector<int> & nMotif) const;
     
     
    };
     
    #endif
    et j'ai l'erreur suivante :

    walid.h: In member function `std::vector<WalidSol, std::allocator<WalidSol> >&
    Walid::getSol() const':
    walid.h:14: error: could not convert `this->Walid::_sol' to `
    std::vector<WalidSol, std::allocator<WalidSol> >&'
    je suis un peu perdu car je ne vois pas du tout la raison pour laquelle il y aurait une erreur. Auriez-vous une idée ?

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    je viens de trouver la solution à mon problème. Dans ma classe Walid, je ne dois pas avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<WalidSol> & getSol() const { return _sol; }
    mais je dois avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const std::vector<WalidSol> & getSol() const { return _sol; }
    Maintenant, quelqu'un saurait-il pourquoi est-ce que je dois rajouter un const ?
    Merci d'avance

  3. #3
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Quand tu déclare une fonction const, this est de type const MaClasse*, donc tu ne peus pas retourner un attribut par référence (ou pointeur) non const, car c'est un cast de const TypeAttribut& vers TypeAttribut&, ce qui n'est pas possible sans le demander explicitement avec un const_cast.

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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