J'ai une classe avec une variable membre statique std :: map qui mappe char
s à un type personnalisé Terrain
. J'essaie de remplir cette carte dans le fichier d'implémentation de la classe, mais j'ai plusieurs erreurs. Voici mon fichier d'en-tête:déclaration conflictuelle lors du remplissage d'une variable std :: map de membre de classe statique
#ifndef LEVEL_HPP
#define LEVEL_HPP
#include <bitset>
#include <list>
#include <map>
#include <string>
#include <vector>
#include "libtcod.hpp"
namespace yarl
{
namespace level
{
class Terrain
{
// Member Variables
private:
std::bitset<5> flags;
// Member Functions
public:
explicit Terrain(const std::string& flg)
: flags(flg) {}
(...)
};
class Level
{
private:
static std::map<char, Terrain> terrainTypes;
(...)
};
}
}
#endif
et voici mon dossier de mise en œuvre:
#include <bitset>
#include <list>
#include <map>
#include <string>
#include <vector>
#include "Level.hpp"
#include "libtcod.hpp"
using namespace std;
namespace yarl
{
namespace level
{
/* fill Level::terrainTypes */
map<char,Terrain> Level::terrainTypes['.'] = Terrain("00001"); // clear
map<char,Terrain> Level::terrainTypes[','] = Terrain("00001"); // clear
map<char,Terrain> Level::terrainTypes['\''] = Terrain("00001"); // clear
map<char,Terrain> Level::terrainTypes['`'] = Terrain("00001"); // clear
map<char,Terrain> Level::terrainTypes[178] = Terrain("11111"); // wall
(...)
}
}
J'utilise g ++, et les erreurs que je reçois sont
src/Level.cpp: 15: erreur : déclaration contradictoire 'std :: map, std :: allocateur>> yarl :: niveau :: Level :: terrainTypes [46]'
src/Level.hpp: 104: erreur: 'yarl :: niveau :: Niveau: : Les 'terrains' ont une déclaration précédente 'std :: map, std :: allocateur>> yarl :: niveau :: Level :: terrainTypes'
src/Level.cpp: 15: erreur: déclaration de 'std :: map, std :: allocateur>> yarl :: niveau :: Level :: terrainTypes' en dehors de la classe n'est pas la définition
src/Level.cpp : 15: erreur: conversion de 'yarl :: level :: Terrain' en type non-scalaire 'std :: map, std :: allocateur>>' demandé
src/Level.cpp: 15: erreur: 'yarl: : level :: Level :: terrainTypes 'ne peut pas être initialisé par une expression non-constante lors de sa déclaration
Je reçois un ensemble de ces éléments pour chaque ligne d'affectation de mappage dans le fichier d'implémentation. Quelqu'un voit ce que je fais mal? Merci de votre aide.
La première option a résolu le problème. Merci de votre aide. – Max