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:
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:
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:
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:
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.