Thinking in c++里面的例子程序的问题
struct X;//declaration (incomplete type spec)
struct Y
{
void f(X*); //void f(X);
};
struct X //definition
{
private:
int i;
public:
friend void Y::f(X*); // f(X);
};
void Y::f(X x) // f(X* x)
{
x->i = 1; // x.i = 1;
}
int main()
{
Y y;
X x;
y.f(&x); // y.f(x);
}
这一段程序解释了友元的用法,其中有关于交叉引用的阐述。
他提到“。如果试图传递整个对象,编译器就必须知道X的全部定义以确定它的大小以及如何传递它,这就使程序员无法声明一个类似于Y :: f(X) 的函数。”
但是我用GCC编译时,可以声明类似于Y :: f(X) 的函数,及我在注释里的写法。
这是怎么回事,是书错了吗?请高手指教!