读书人

:两个类相互引用无法编译。(VS 200

发布时间: 2012-04-20 15:27:03 作者: rapoo

请教高手:两个类相互引用,无法编译。(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文件定义的方式来解决。
[解决办法]
真能想...

读书人网 >C++

热点推荐