gpt4 book ai didi

c++ - 使用未定义的类/具有不完整的类型

转载 作者:行者123 更新时间:2023-11-28 03:01:16 25 4
gpt4 key购买 nike

class a;
class b;

class a {
b c;
};

class b {
};

为什么不能编译?我的印象是,如果您声明类的原型(prototype),那么声明它们的顺序并不重要。但是,这不起作用。在 visual studio 中,它给了我:

error C2079: 'a::c' uses undefined class 'b'

在 g++ 中,它给了我:

error: field 'c' has incomplete type

我做错了什么?

最佳答案

当编译器看到

class a {
b c;
};

它知道 b 存在,但不知道它是什么(因此,它不知道它需要多少空间,因此它不知道如何构建 a)

但是你可以做的是在 b 上使用指针:

class a {
b* c;
};

编辑:

这意味着您将无法在 b 定义之前对其进行操作。例如:你不能做:

class a {
b* c;
void f(){
c->doSomething(); // <- Won't compile
}

};

可以做的是将 a 定义分隔在 .hh.cc 中:

在a.hh

class b; //Say it exists. Don't say what it looks like

class a {
b* c;
void f();
};

在 a.cc 中

#include "b.hh" //now it's ok to use b.hh: it won't yield a circular reference because b.hh may include a.hh but it doesn't include a.cc

void a::f(){
c->doSomething();
}

关于c++ - 使用未定义的类/具有不完整的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791174/

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