读书人

c++编程思想1卷2版135页解决办法

发布时间: 2012-02-09 18:22:27 作者: rapoo

c++编程思想1卷2版135页
struct X;

struct Y
{
void f(X*);

};
struct X
{
private:
int i;
public:
void initialize();
friend void Y::f(X*);
};

书上说要传址,我试了下传值也能运行呀,
“如果试图传递整个对象,编译器必须知道X的全部定义以确定它的大小以及如何传递使得无法声明一个类似Y::g(X)的函数” 这句什么意思,我声明了也能运行呀

[解决办法]

探讨
明明不用指针也可以的~~

struct X;

struct Y
{
void f(X);
};
struct X
{
private:
int i;
public:
void initialize();
friend void Y::f(X);
};

楼上的,你这样能编译是因为声明和定义放在同一个文件里了,你将他们分开看看?
void Y::f(X x)
{
x.i = 1;
}
int main()
{
X x;
Y y;
y.f(x);
}

读书人网 >C++

热点推荐