J'ai le problème de dépendance cyclique suivant, je suis en train de résoudre:Briser la dépendance cyclique en C++
typedef std::map<int, my_class> my_map;
class my_class {
...
private:
my_map::iterator iter;
};
class otherclass{
public:
my_map::iterator getIter();
private:
my_map map;
};
Le compilateur n'aime pas, puisque my_class n'a pas été déclaré avant la typedef.
si je tente de transmettre-déclarer maclasse comme ceci:
class my_class;
typedef std::map<int, my_class> my_map;
class my_class {
...
private:
my_map::iterator iter;
};
class otherclass{
public:
my_map::iterator getIter();
private:
my_map map;
};
je reçois une « erreur: déclaration avant de« my_class ».
Comment puis-je rompre ce cercle vicieux? Je suis désolé mais je dois réviser ma question, car j'ai remarqué que ma représentation est légèrement fausse.
Ce qui suit est la représentation correcte de mon problème:
class my_container;
typedef std::map<int, my_container> my_map;
class my_class {
...
private:
my_map::iterator iter;
};
class my_container {
public:
my_class a_method();
private:
vector<my_class> v;
};
class otherclass{
public:
my_map::iterator a_method();
my_class another_method();
my_container yet_another_method();
private:
my_map map;
};
Désolé ce
peut vous envoyer le message d'erreur exacte donnée par le compilateur? – Naveen
En prenant une copie exacte du code ci-dessus et en supprimant le '...' de ma_classe compile dans VS2005 – Patrick
L'exemple révisé compile également avec VS2010 même avec les extensions de langue désactivées. –