У меня проблема следующей циклической зависимости я пытаюсь решить:Ломать циклическую зависимость в 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;
};
компилятору не нравится это, поскольку my_class не был объявлен до ЬурейеГо.
если я пытаюсь передать, объявить MyClass следующим образом:
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;
};
я получаю «ошибка: опережающее объявление о„my_class“».
Как я могу разбить этот порочный круг?
Извините, но я должен пересмотреть свой вопрос, поскольку я заметил, что мое представление немного ошибочно.
Ниже правильное представление моей проблемы:
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;
};
К сожалению об этом
Вы можете оставить точное сообщение об ошибке, данное компилятором? – Naveen
Выполнение точной копии приведенного выше кода и удаление «...» из сборки my_class в VS2005 – Patrick
Пересмотренный пример также компилируется с VS2010 даже при выключенном расширении языка. –