Я пытаюсь объявить и использовать класс B внутри класса A и определить B вне A.
Я точно знаю, что это возможно, потому что Бьерн Страуструп
использует это в своей книге "Язык программирования C++"
(стр. 293, например, классы String и Srep).
Итак, это мой минимальный фрагмент кода, который вызывает проблемы
class A{
struct B; // forward declaration
B* c;
A() { c->i; }
};
struct A::B {
/*
* we define struct B like this becuase it
* was first declared in the namespace A
*/
int i;
};
int main() {
}
Этот код дает следующие ошибки компиляции в g++:
tst.cpp: In constructor ‘A::A()’:
tst.cpp:5: error: invalid use of undefined type ‘struct A::B’
tst.cpp:3: error: forward declaration of ‘struct A::B’
Я попытался просмотреть FAQ по C++, и я получил следующее: здесь и здесь, но
они не относятся к моей ситуации.
Я также прочитайте это отсюда, но это не решает мою проблему.
И gcc, и MSVC 2005 выдают ошибки компилятора по этому поводу.