3
是否可以转发声明在另一个前向声明的类中声明的类?前向声明的类成员的前向声明
基本上,我有这样的事情
//A.h
class A
{
...
struct B
{
...
};
};
,现在我要声明另一个类这样
//Q.h
class A;
struct A::B;
class Q
{
A::B* Foo();
};
是否可以转发声明在另一个前向声明的类中声明的类?前向声明的类成员的前向声明
基本上,我有这样的事情
//A.h
class A
{
...
struct B
{
...
};
};
,现在我要声明另一个类这样
//Q.h
class A;
struct A::B;
class Q
{
A::B* Foo();
};
不,不能这样做。要访问A
的成员,必须对其进行定义,无论成员是类型,数据还是功能。
难道仅仅编译上面的代码并自己尝试一下很难吗? – mfontanini 2012-03-14 12:13:29
@fontanini啊。但它可靠地工作吗?在所有编译器上?根据标准合法吗? – 2012-03-14 12:15:06
我尝试过,自然。编译器说“使用未定义的类型A”。 – obamator 2012-03-14 12:15:42