gpt4 book ai didi

c++ - 类体内的前向声明是否被视为不同的类型?

转载 作者:太空狗 更新时间:2023-10-29 19:47:33 25 4
gpt4 key购买 nike

我在封闭类中有两个内部结构,在其中一个结构中,我有一个指针成员指向另一个结构类型的对象。为了提高可读性并明确前向声明适用于需要它的结构,我将前向声明放在内部结构本身中。像这样

class Enclosing{
public:
struct InnerA{
struct InnerB; // forward declaration inside InnerA to improve readability
InnerB* b;
// other members
};

struct InnerB{

// lots of member variables
};
};

然后在外面的某个地方我有一个函数

void DoSomething(){
Enclosing::InnerA a;


// error incompatible types Enclosing::InnerB* and Enclosing::InnerA::InnerB*
Enclosing::InnerB* ptr = a.b;
}

据我了解,前向声明只是一种告诉编译器类存在的方式,而不是定义一个完全不同的新类型。这是标准吗?如果是这样,有没有办法在结构内部进行前向声明而不被视为不同的类型?

最佳答案

是的,它被认为是不同的类型。

声明将名称置于声明出现的范围内。每个类都介绍了自己的范围。因此,在您的情况下,您有 Enclosing::InnerA::InnerB,这与 Enclosing::InnerB 明显不同。

恐怕没有办法在当前范围之外的其他范围内声明名称。您只需要在 Enclosing 中直接声明 InnerB,然后在使用它的地方定义 InnerA

关于c++ - 类体内的前向声明是否被视为不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56284127/

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