[英]Regarding forward declaration c++ class
我有两个这样的课程:
class B;
class A {
public:
int a, b;
B *b;
public:
int getctxt()
{
b->getctxt1();
}
}
Class B {
public:
int c,d;
A *a;
getctxt1()
{
/* something */
}
}
main()
{
B *b = new B();
A *a = new A();
b->a = a;
a->b = b;
}
但是,当我尝试编译时,它说
无效使用不完整类型'struct A'。
谁能告诉我如何解决这个问题?
内联类成员函数定义被解析,就好像它们出现在类定义之后。 当然, B
在那时没有定义。 因此,将A::getctxt
的成员函数定义移出A
类的定义:
class B;
class A { int getctxt(); /* ... */ };
class B { /* ... */ };
int A::getctxt()
{
b->getctxt1(); // at this point, *b has complete type!
return -35;
}
这就是为什么建议在.h文件和.cpp文件中分离类的原因。 当你写class B;
,你告诉编译器有一个叫做B的类,但就是这样,编译器不知道这个类里面有什么。 当编译器到达b->getctxt1();
,它知道b
是B
一个实例,但它不知道getctxt1()
是否是B
的方法,因为它在下面。 如果您在一个文件中编写所有内容,则应首先编写所有声明,然后编写所有实现。
没有人注意到Class B
语法错误? 小写class
是正确的。 A中的两个公共成员同名int b
和B *b
。
删除它们并用分号完成类定义后,在void getctxt1()
中添加一个void类型,它在B中缺少它。
只需定义应定义的函数。 没有理由你不知道是哪个!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.