【发布时间】:2022-01-12 16:07:25
【问题描述】:
我一直在研究 C++,发现 gdb 的一个令人惊讶的行为。我想知道这是预期的行为,还是我搞砸了。
enum class Foo;
struct Bar { Foo a; int b; };
enum class Foo { A, B, C };
int main() {
auto a = Foo::A;
auto b = Bar{ Foo::A, 1 };
}
使用 gcc 7.5.0(使用 -g 选项)构建并使用 gdb 8.1.1 运行
尝试打印 a 或 b.a 的值时,结果为 <incomplete type>。
如果 struct 声明不在两个枚举声明之间,或者如果枚举被完全声明一次,则不会发生这种情况。
出于我尝试这个的实际原因,我有一个头文件,其中包含一个相对较大的类声明,其中一些成员是枚举类型。我觉得类声明更干净后枚举的完整声明,并决定部分声明它们。
我可以做些什么来访问 gdb 中的变量信息,同时仍然执行这些部分声明,或者完全声明我的枚举是唯一的方法。
这些类似的问题
- gdb class is incomplete type until I set breakpoint in class constructor?
- How to print <incomplete type> variable in gdb
- GDB incomplete type when having C++ virtual function
不要关心我的情况,因为如果仅完全声明枚举,我可以轻松访问类型信息。
【问题讨论】: