int main() {
B bb; //does not compile (neither does class B bb;)
C cc; //does not compile
struct t tt; //compiles
class B {}; //HERE is the class B defination
struct s { struct t * pt; }; //compiles
struct t { struct s * ps; };
return 0;
}
class C {};
Я только что изменил пример, приведенный здесь.
Почему опережающее объявление структуры работает, а опережающее объявление класса — нет?
Это как-то связано с пространствами имен — tag namespace
и typedef namespace
? Я знаю, что определения структуры без определения типов относятся к пространству имен тегов.
Структуры — это просто классы со всеми открытыми членами. Поэтому я ожидаю, что они будут вести себя одинаково.