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 :

invalid conversion from ‘Position*’ to ‘int’ !?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut invalid conversion from ‘Position*’ to ‘int’ !?
    Bonjour a tous,

    Je suis en train de m'entrainer pour mon rattrapage de C++ en refaisant l'epreuve que j'ai ratee. J'ai un peu de mal avec quelques notions, exemple:

    Voici mon code:

    Pion.cxx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "Pion.h"
     
    Pion::Pion(std::string coul, Position& p)
    {
    	type="pion";
    	couleur=coul;
    	symbole="P";
    	valeur=1;
    	Position* ptemp = new Position(p.getX(), p.getY());
    	pos = ptemp;
    }
    Pion.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #ifndef PION
    #define PION
     
    #include "Piece.h"
    #include "Position.h"
     
    class Pion : Piece
    {
    	public:
    		Pion(std::string, Position&); //Couleur, Position
    };
    #endif
    Position.cxx
    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
    #include "Position.h"
    #include "stdio.h"
     
    Position::Position(int X, int Y)
    {
    	x=X;
    	y=Y;
    }
     
    Position::Position(const Position& P)
    {
    	x=P.x;
    	y=P.y;
    }
     
    void Position::setX(int X)
    {
    	x=X;
    }
     
    void Position::setY(int Y)
    {
    	y=Y;
    }
     
    int Position::getX()
    {
    	return x;
    }
     
    int Position::getY()
    {
    	return y;
    }
     
    void Position::AffichePosition()
    {
    	std::cout<<"X="<<x<<" et Y="<<y;
    }
     
    std::ostream& operator << (std::ostream& ini, const Position& p)
    {
    	ini<<"X="<<p.x<<" et Y="<<p.y;
    	return ini;
    }
     
    bool operator == (const Position &q, const Position& p)
    {
    	if ((p.x == q.x) && (p.y == q.y))
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    Position.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
    #ifndef POSITION
    #define POSITION
     
    #include <iostream>
     
    class Position
    {
    	private:
    	int x;
    	int y;
     
    	public:
    	Position(int=0, int=0);
    	Position(const Position&);
     
    	int getX();
    	int getY();
    	void setX(int);
    	void setY(int);
     
    	void AffichePosition();
    	friend std::ostream& operator << (std::ostream&, const Position&);
    	friend bool operator == (const Position&, const Position&);
     
    };
     
    #endif
    Pion herite de Piece, une classe abstraite, mais je ne pense pas que vous en ayez besoin pour me repondre.

    Le compilateur me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Pion.cxx: In constructor ‘Pion::Pion(std::string, Position&)’:
    Pion.cxx:10:8: error: invalid conversion from ‘Position*’ to ‘int’
    Pion.cxx:10:8: error:   initializing argument 1 of ‘Position::Position(int, int)
    et je refuse de le croire, pour la simple et bonne raison que p.getX() retourne bel et bien un int et non un Position*, comme vous pouvez le constater.

    Si quelqu'un peut m'expliquer et me donner la solution...

    Merci d'avance.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Si je ne me trompe pas, là il râle sur l'assignation de 'pos'. C'est une variable membre, je suppose, mais de quel type ? Si ce n'est pas une variable membre, d'où ça sort ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    pos est un attribut de la classe mere de Pion, qui s'appelle Piece. Cet attribut est protected, et de type Position.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    J'ai trouve, il fallait mettre ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Position* ptemp = new Position(p.getX(), p.getY());
    pos = *ptemp;
    C'est vraiment au pif que j'ai trouve, ca n'a aucun sens pour moi de faire comme ca...
    D'abord, comment se fait-il que le new renvoie un pointeur sur structure?
    Je croyais que ca creait une structure en bonne et due forme...

  5. #5
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Je crois qu'il faut que tu revoies les cours de C/C++. En Java ton assertion serait vraie, mais pas en C, ni C++.
    http://chgi.developpez.com/pointeur/
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    Hello,
    Citation Envoyé par User Name Voir le message
    J'ai trouve, il fallait mettre ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Position* ptemp = new Position(p.getX(), p.getY());
    pos = *ptemp;
    Je ne vois pas l'intérêt de ce code.
    Ici tu crées un pointeur local dans ton constructeur (ptemp), puis tu copies sa valeur dans ton attribut pos. À la sortie du constructeur, le pointeur ptemp n'existe plus, mais la mémoire n'a pas été libérée.
    Tu as donc une fuite de mémoire.

    Pour initialiser ton attribut pos sans passer par un pointeur qui ne sert à rien ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pos = Position(p.getX(), p.getY())
    Autre chose, un constructeur devrait de préférence utiliser une liste d'initialisation pour initialiser ses membres, plutôt que de faire des affectations dans son corps.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Ce devrait pas être quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pion::Pion(std::string const &coul, Position const & p):Piece(coul,p)
    {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Piece::Piece(std::string const&coul, Position const&p)
    :
            couleur(coul)
    	,type("pion")
    	,symbole("P")
    	,valeur(1)
    	,pos(p)
    {}
    Je pense que ton allocation est une erreur et génère une fuite mémoire.

Discussions similaires

  1. invalid conversion from int to int
    Par asprog dans le forum Débuter
    Réponses: 13
    Dernier message: 25/01/2011, 16h17
  2. Réponses: 4
    Dernier message: 15/10/2008, 21h30
  3. Réponses: 7
    Dernier message: 16/02/2008, 07h30
  4. error: invalid conversion from `const wxChar*' to `CHAR*'
    Par barbarello dans le forum wxWidgets
    Réponses: 16
    Dernier message: 31/01/2006, 11h28
  5. Réponses: 2
    Dernier message: 24/12/2005, 11h37

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