У меня есть два класса, которые зависят друг от друга:
class Foo; //forward declaration
template <typename T>
class Bar {
public:
Foo* foo_ptr;
void DoSomething() {
foo_ptr->DoSomething();
}
};
class Foo {
public:
Bar<Foo>* bar_ptr;
void DoSomething() {
bar_ptr->DoSomething();
}
};
Когда я компилировал его в g ++, он выдавал ошибку «Недопустимое использование неполного типа», но он был красиво скомпилирован в MSVC 10Возможно ли решить эту проблему, сохранив объявление и определение в одном заголовочном файле?(без файлов cpp) Если это не разрешено в стандарте, то является ли это «ошибкой» или «функцией» MSVC?