gpt4 book ai didi

c++ - 为什么 C++ 中的 "incomplete type error"不适用于嵌套类

转载 作者:行者123 更新时间:2023-12-02 10:04:46 31 4
gpt4 key购买 nike

我有以下代码

class A;
class B;

class A
{
B b() const { return B();}
};

class B
{
A a() const { return A(); }
};


它产生以下错误:
 In member function 'B A::b() const':
error: return type 'class B' is incomplete
error: invalid use of incomplete type 'class B'
error: forward declaration of 'class B'

但是,如果我将此代码放在另一个类定义中,如下所示:
class C
{
class A;
class B;

class A
{
B b() const { return B();}
};

class B
{
A a() const { return A(); }
};
};

编译器不再提示了。

问题:为什么在第二种情况下可以,但在第一种情况下是错误的?

最佳答案

出于同样的原因,成员函数可以访问在类主体中声明在它下面的变量。从标准来看,强调我的:

6 A class is considered a completely-defined object type ([basic.types]) (or complete type) at the closing } of the class-specifier. Within the class member-specification, the class is regarded as complete within function bodies, default arguments, noexcept-specifiers, and default member initializers (including such things in nested classes). Otherwise it is regarded as incomplete within its own class member-specification.



所以里面 A::bC 的完整类定义是给定的。这包括 B 的完整类定义,因此您可以创建该类型的对象。

关于c++ - 为什么 C++ 中的 "incomplete type error"不适用于嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60797400/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com