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.