问题标签 [incomplete-type]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
660 浏览

c++ - 删除表达式

参考这里

该析构函数还将隐式调用 auto_ptr 对象的析构函数。这将删除它持有的指针,该指针指向 C 对象 - 不知道 C 的定义!这出现在 .cpp 文件中,其中定义了 struct A 的构造函数。

这很好奇,然后

5.3.5/5 状态 - “如果要删除的对象在删除点具有不完整的类类型,并且完整的类具有非平凡的析构函数或释放函数,则行为未定义。”

我的问题是,为什么这样一个试图删除指向不完整类型的指针的程序不被视为格式错误?为什么它被推到有条件的领域(并且完整的类有一个非平凡的析构函数..)“未定义的行为”?

“和”是什么意思?

编辑2:

下面的代码格式正确吗?VS 和 Gcc/CLang 编译,但 Comeau 给出警告。我想这一切都是标准中提到的未定义行为的一部分。我的问题是'为什么这不是格式错误但未定义'?

0 投票
3 回答
28042 浏览

c++ - 错误:字段类型不完整

quaternion.h:15:错误:字段“v”的类型不完整

你好!我陷入了一个似乎无法解决的错误。

下面是我的代码:

我的 Vec.h 看起来像这样:

再次感谢您的帮助 =)

0 投票
4 回答
165 浏览

c++ - #includes 和不完整类型存在问题

我已经摆脱了循环依赖,但仍然遇到另一个问题。

我仍在学习,希望有人可以向我解释我的实施有什么问题。很抱歉给我带来了麻烦,但我真的很感谢所有帮助我的人。

所以,我现在遇到的问题是,在我的 Vec3 类中,它正在尝试使用四元数,但它没有四元数的“完整类型”。

以下是我所拥有的:

vec3.h

四元数

vec3.cpp 这个函数的每一行都有错误。

0 投票
2 回答
3458 浏览

c - C 变量具有不完整的初始化程序

我正在尝试使用默认值创建一个结构,如此处所述:Default values in a C Struct。但是,我在头文件中有这个 C 代码:

我在第 7 行收到一条错误消息:

任何人都可以向我解释这个问题是什么以及我如何解决它并在将来防止它?

0 投票
1 回答
1274 浏览

c++ - C++ SDL Mixer Mix_Music:不允许不完整的类型

每当我尝试创建 Mix_Music 实例时,我都会收到此错误:“不允许使用不完整的类型”。

但是,我需要在调用 Mix_LoadMUS(file); 之前获取指针音乐的地址;

代码:

我该怎么做呢?

0 投票
3 回答
16688 浏览

c++ - 删除不完整类型的对象

这让我想到:

delete p如果我们甚至不知道是否X有可见的析构函数,我们怎么可能呢?g++ 4.5.1 给出三个警告:

然后它说:

注意:析构函数和特定于类的操作符 delete 都不会被调用,即使它们是在定义类时声明的。

哇...是否需要编译器来像 g++ 那样诊断这种情况?或者它是未定义的行为?

0 投票
1 回答
748 浏览

c++ - 如何声明一个朋友是另一个尚未在 C++ 中定义的类的成员函数?

我如何将 B 的构造函数声明为 A 的朋友?我试过:

0 投票
3 回答
1024 浏览

c++ - 处理比较:空类与未定义类与 void*

Microsoft 的GDI+定义了许多在内部被视为句柄的空类。例如,(来源GdiPlusGpStubs.h

还有另外两种定义句柄的方法。他们是,

我只想知道每种方法的优缺点。

微软方法的一个优点是,他们可以使用空类定义句柄的类型安全 层次结构,这(我认为)在其他两种方法中是不可能的,尽管我想知道这种层次结构会给实现带来什么好处?无论如何,还有什么?

编辑:

第二种方法(即使用不完整的类)的一个优点是我们可以防止客户端取消引用句柄(这意味着,这种方法似乎强烈支持封装,我想)。如果尝试取消引用句柄,代码甚至无法编译。还有什么?

第三种方法也具有相同的优势,即您不能取消引用句柄。

0 投票
2 回答
3372 浏览

c++ - 在具有模板构造函数的类中使用智能指针的 Pimpl:奇怪的不完整类型问题

当使用带有 pImpl 习惯用法的智能指针时,如

明显的问题是在析构函数的生成Foo::Impl点是不完整的。Foo

编译器通常会在那里发出警告,并且boost::checked_deleteBoost 智能指针在内部使用它,静态断言该类Foo::Impl是完整的,如果不是这种情况则触发错误。

为了编译上面的示例,因此必须编写

Foo::~Foo并在实现文件中实现一个空,这里Foo::Impl是完整的。这是智能指针相对于裸指针的优势,因为我们不能不实现析构函数。

到目前为止,一切都很好。但是当我尝试在类似的Bar类中引入模板构造函数时遇到了一个奇怪的行为(完整代码,请自行尝试):

使用 Visual Studio 2005 SP1 编译此示例时,出现以下错误Bar但未出现错误Foo

我一回到家就用最近的 gcc 试试这个。

我不明白发生了什么:在定义析构函数的地方(即 in Bar.cpp),定义 ofBar::Impl是可用的,所以应该没有任何问题。为什么这适用于Foo而不适用于Bar

我在这里想念什么?

0 投票
3 回答
961 浏览

c++ - Qt 4 C++ 使用 3 个相互使用的类时出错,错误:字段“m_Employer”的类型不完整

我迫切需要帮助和指导。一直试图让它编译,但由于有 3 个类而不是数百个类,包含/转发声明应该如何在这里工作。

错误在 person.h 中标记。

除了错误之外,我在 main.cpp 中标记了一个警告。

这是一个控制台应用程序。

先感谢您。

人.h

个人.cpp

雇主.h

雇主.cpp

位置.h

位置.cpp

主文件