请教高手:两个类相互引用,无法编译。(VS 2003 .net VC++7)
class A;
class B
{
public:
A * a;
void set(A * p){a = p};
void func1()
{
a-> func2();
}
void func2()
{
}
};
class A
{
public:
B * b;
void set(B * p){b = p};
void func1()
{
b-> func2();
}
void func2()
{
}
};
int main()
{
A a;
B b;
a.set(&b);
a.func1();
return 0;
}
正在编译...
Test1.cpp
g:\opengl游戏程序设计\source\chapter21\test1\test1.cpp(60) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
g:\opengl游戏程序设计\source\chapter21\test1\test1.cpp(63) : error C2027: 使用了未定义类型“A”
g:\opengl游戏程序设计\source\chapter21\test1\test1.cpp(54) : 参见“A”的声明
g:\opengl游戏程序设计\source\chapter21\test1\test1.cpp(63) : error C2227: “-> func2”的左侧必须指向类/结构/联合
生成日志保存在“file://g:\OpenGL游戏程序设计\Source\chapter21\Test1\Debug\BuildLog.htm”中
Test1 - 3 错误,0 警告
不管把哪个类放在前面,都会报错。请教高手,不要改变上述类的功能,使程序编译通过。
[解决办法]
首先,
void set(A * p){a = p};
要改成:
void set(A * p){a = p;}
[解决办法]
class A;
class B
{
public:
A * a;
void set(A * p);
void func1();
void func2();
};
class A
{
public:
B * b;
void set(B * p);
void func1();
void func2();
};
void A:: set(B * p)
{b = p;}
void B::set(A * p)
{
}
void B::func1()
{
a-> func2();
}
void B::func2()
{
}
void A::func1()
{
b-> func2();
}
void A::func2()
{
}
int main()
{
A a;
B b;
a.set(&b);
a.func1();
}
[解决办法]
你这叫恶搞!
不要这么做!
[解决办法]
晨星老大都说了,偶来看看
只是想说,设计良好的程序应该尽量避免这种相互引用。
如果感觉不可避免,就使用头文件声明和cpp文件定义的方式来解决。
[解决办法]
真能想...