【发布时间】:2013-03-06 20:45:23
【问题描述】:
据我所知,在定义具有对象返回类型的函数时,该类仅处于其前向声明状态,如下所示:
class A;
//前向声明,将A设置为不完整类型
A foo(){...}
//错误:A 是不完整的类型 我知道当它具有指向该对象的指针或引用的返回类型时它可以正常工作。
但是当我定义一个返回类型作为其类的方法时:
class B{
public:
B foo(){...}
}
效果很好。
我认为在类的定义中定义方法时,类仍然是一个不完整的类型。 所以我认为它会提示类似于前者的错误,但它没有。 有谁知道为什么?
我在这里寻求帮助之前已经搜索了很长时间。 (我的英语不好,所以我的描述可能会让你感到困惑。抱歉。)
【问题讨论】:
-
这不是一个错误,因为你错了 -
B在它自己的定义中并不完整。它并不是不完整的,因为标准是这样说的(标准是这样说的,否则它会很烦人)。 -
@molbdnilo 我认为 B 是一个不完整的类型,因为当我尝试在 B 类的定义中定义 B 的实例时,我得到了“不完整类型”的错误
-
A 的定义显然不完整。它有哪些成员?但是 B 的定义是完整的。它只有一个函数,叫做
foo。 -
A没有成员,我刚刚做了那个前向声明
-
编译器无法知道 A 没有成员,而 B 的定义完全可用。
标签: c++ incomplete-type