gpt4 book ai didi

C++ 嵌套类前向声明​​错误

转载 作者:可可西里 更新时间:2023-11-01 18:02:07 26 4
gpt4 key购买 nike

我正在尝试在 A 类中声明和使用 B 类并在 A 之外定义 B。
我知道这是可能的,因为 Bjarne Stroustrup
在他的书“The C++ programming language”中使用了它
(第 293 页,例如 String 和 Srep 类)。

所以这是我导致问题的最小代码段

class A{
struct B; // forward declaration
B* c;
A() { c->i; }
};

struct A::B {
/*
* we define struct B like this becuase it
* was first declared in the namespace A
*/
int i;
};

int main() {
}

此代码在 g++ 中给出以下编译错误:

tst.cpp: In constructor ‘A::A()’:
tst.cpp:5: error: invalid use of undefined type ‘struct A::B’
tst.cpp:3: error: forward declaration of ‘struct A::B’

我试图查看 C++ 常见问题解答,我得到的壁橱是 herehere但是
这些不适用于我的情况。
我也是read this从这里开始,但这并没有解决我的问题。

gcc 和 MSVC 2005 都给出编译器错误

最佳答案

表达式 c->i 取消对指向 struct A::B 的指针的引用,因此在程序中此时必须可以看到完整的定义。

最简单的修复方法是使 A 的构造函数成为非内联的,并在定义 struct A::B 之后为其提供主体。

关于C++ 嵌套类前向声明​​错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/310557/

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