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 :

Problème de variable membre en pointeur dans une classe


Sujet :

Langage C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème de variable membre en pointeur dans une classe
    Bonjour,

    je suis en train de développer un petit solveur de labyrinthe en essayant d'être un peu générique afin de mieux me familiariser avec le c++ (je viens plutôt de java). Or je tombe sur une petite série d'erreur que je suis incapable de comprendre, même après recherche sur internet etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Erreur	1	error C2039: 'Map' : n'est pas membre de 'MazeSolver'	c:\users\medrimonia\documents\visual studio 2010\projects\mazesolver\mazesolver\Maze.h	38	1	MazeSolver
    Erreur	2	error C2143: erreur de syntaxe : absence de ';' avant '*'	c:\users\medrimonia\documents\visual studio 2010\projects\mazesolver\mazesolver\Maze.h	38	1	MazeSolver
    Erreur	3	error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut	c:\users\medrimonia\documents\visual studio 2010\projects\mazesolver\mazesolver\Maze.h	38	1	MazeSolver
    Erreur	4	error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut	c:\users\medrimonia\documents\visual studio 2010\projects\mazesolver\mazesolver\Maze.h	38	1	MazeSolver
    Erreur	5	error C2061: erreur de syntaxe : identificateur 'Map'	c:\users\medrimonia\documents\visual studio 2010\projects\mazesolver\mazesolver\Maze.h	40	1	MazeSolver
    Erreur	6	error C2065: 'map' : identificateur non déclaré	c:\users\medrimonia\documents\visual studio 2010\projects\mazesolver\mazesolver\Maze.h	41	1	MazeSolver
    Erreur	7	error C2065: 'm' : identificateur non déclaré	c:\users\medrimonia\documents\visual studio 2010\projects\mazesolver\mazesolver\Maze.h	41	1	MazeSolver
    Erreur	8	error C2065: 'map' : identificateur non déclaré	c:\users\medrimonia\documents\visual studio 2010\projects\mazesolver\mazesolver\Maze.h	45	1	MazeSolver
    Ce qui me semble aussi étrange, c'est qu'en remplaçant le Map par Cell, ce type de déclaration ne semble plus poser problème.

    Voici le contenu des trois fichiers incriminés

    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
    #ifndef MAZE_H
    #define MAZE_H
     
    #include <ostream>
     
    #include "boost/graph/adjacency_list.hpp"
     
    #include "Cell.h"
    #include "Edge.h"
    #include "Map.h"
     
    namespace MazeSolver{
     
        typedef boost::adjacency_list<
            boost::vecS,
            boost::vecS,
            boost::undirectedS,
            Cell,
            Edge> MazeGraph;
     
        typedef MazeGraph::vertex_descriptor cell_id;
        typedef MazeGraph::edge_descriptor   edge_id;
     
        struct found_goal{};
     
        class Maze
        {
        private :
            MazeGraph graph;
            Map * map; // C'est cette instruction qui pose problème
        public:
            Maze(Map * m){
                map = m;
            };
     
            virtual std::ostream & prettyPrint(std::ostream & out) const{
                return out << map;
            };
     
            friend std::ostream &operator<<(std::ostream &out, Maze const &m);
        };
    }
     
    #endif
    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
    #ifndef MAP_H
    #define MAP_H
     
    #include "Maze.h"
     
    namespace MazeSolver{
     
        class Map{
        protected :
            std::vector<Cell> cells;
        public :
            virtual ~Map() = 0;
     
            // shouldn't be used to ensure encapsulation
            // Return the cell at the specified position
            virtual Cell & getCell(float x, float y) const = 0;
     
            virtual bool isValid(float x, float y) const = 0;
            // Return the id of the cell at the specified position
            virtual int getCellID(float x, float y) const = 0;
     
            virtual std::ostream & prettyPrint(std::ostream &out) const;
     
            friend std::ostream & operator<<(std::ostream &out, Map const &m);
        };
     
    }
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifndef CELL_H
    #define CELL_H
     
    namespace MazeSolver{
        class Cell{
        };
    }
    #endif
    Si l'un d'entre vous a une piste, je lui en serais très reconnaissant. N'hésitez pas à émettre des critiques non plus, mon but étant réellement de progresser en c++, savoir ce que je fais mal est important.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    tu as surement un problème d'inclusions cycliques.
    Utilise des forward declaration.
    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.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup, ça fonctionne mieux!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/09/2011, 09h07
  2. passage de pointeur dans une classe
    Par ccinfonews dans le forum C++
    Réponses: 8
    Dernier message: 16/11/2010, 00h08
  3. Problème de const et de pointeur dans une méthode
    Par Vonziz dans le forum Débuter
    Réponses: 15
    Dernier message: 18/09/2008, 14h41
  4. Réponses: 1
    Dernier message: 26/09/2007, 17h16
  5. Réponses: 8
    Dernier message: 12/04/2007, 11h32

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