问题标签 [forward-declaration]

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 投票
5 回答
2929 浏览

c++ - C++ 棘手的继承类定义问题

在处理包括彼此在内的多个类时出现此错误:

我知道发生了什么,但我不知道如何正确纠正它。这是代码的抽象版本:

A.cpp

溴化氢

B.cpp

Jh

J.cpp

K.cpp

主文件


main.cpp开始,我可以确定这是编译器看到的:

因此,当我们到达B时, A的定义并不完整。有人告诉我,有时您需要使用前向声明,然后将#include语句移动到.cpp文件中,但我对此没有任何运气。如果我尝试这样的事情,我只会得到额外的错误:

我想也许我只是没有在正确的地方做事。有人可以告诉我如何编译这段代码吗?非常感谢你!


编辑:我想指出这只是真实代码的抽象版本。我意识到在A中没有对KJ中的B的引用,但是在真实的代码中有,我觉得它们是完全必要的。也许如果我对真实类进行简要描述,有人可以帮助我重组或修复我的代码。

A类是一个抽象节点类,充当图中节点的接口。B类是A的许多不同实现之一。同理,J类是一个抽象的Visitor类,K是对应的实现。这是具有更多上下文的代码:

(抽象节点)

A.cpp

Bh(具体节点)

B.cpp

Jh(抽象访问者)

J.cpp

Kh(具体访客)

K.cpp

主文件

我必须添加一些前向声明以使出现的一些额外错误(当我添加细节时)消失。其中一些可能不是必需的或不正确的。

0 投票
8 回答
4565 浏览

c++ - 是否值得提前声明库类?

我刚刚开始学习 Qt,使用他们的教程。我目前正在学习教程 7,我们在其中创建了一个新的 LCDRange 类。LCDRange(.cpp文件)的实现使用Qt QSlider类,所以在.cpp文件中是

但在标题中是一个前向声明:

根据 Qt,

这是另一个经典技巧,但使用频率要低得多。因为我们在类的接口中不需要QSlider,只在实现中,我们在头文件中使用类的前向声明,并在.cpp文件中包含QSlider的头文件。

这使得大型项目的编译速度更快,因为编译器通常将大部分时间用于解析头文件,而不是实际的源代码。仅此一项技巧通常可以将编译速度提高两倍或更多。

这值得做吗?这似乎是有道理的,但还有一件事需要跟踪——我觉得将所有内容都包含在头文件中会简单得多。

0 投票
10 回答
184973 浏览

c++ - C++ 中 typedef 的前向声明

为什么编译器不让我转发声明 typedef?

假设这是不可能的,保持我的包含树小的最佳做法是什么?

0 投票
2 回答
7324 浏览

c++ - 在 C++ 中前向声明一个类的公共 typedef

我试图通过使用前向声明并将#includes移动到实现文件中来简化一堆头文件“包括意大利面条”。但是,我不断遇到以下情况:

我想在尽可能多的情况下删除#include "Bar.h"。我还看到 Bar.h 中的 typedef 列在 Bar 类之外的情况。我假设这两种情况都可以以相同的方式解决。

有任何想法吗?

0 投票
6 回答
5239 浏览

c++ - Is it possible to declare a class without implementing it? (C++)

I know the questions seems ambiguous, but I couldn't think of any other way to put it, but, Is it possible to do something like this:

?

0 投票
6 回答
365 浏览

c++ - 在堆上创建对象需要对象的大小吗?

当编译器需要知道 C(类)对象的大小时:例如,在堆栈上分配 C 或作为另一种类型的直接持有成员时

来自C++ 编码标准:101 条规则、指南和最佳实践

这是否意味着对于堆分配的对象,大小不是必需的?

0 投票
7 回答
62296 浏览

c++ - C++ 中嵌套类型/类的前向声明

我最近陷入了这样的情况:

通常你可以声明一个类名:

但是不能前向声明嵌套类型,以下会导致编译错误。

有任何想法吗?

0 投票
1 回答
2009 浏览

.net - 如何在 C++/CLI 中转发声明委托?

如何?

以下没有工作:

申报工作如下:

但是使用它作为前向声明给了我

0 投票
3 回答
105441 浏览

c++ - 如何转发声明内部类?

我有这样的课...

在其他地方,我想通过引用传递一个 Container::Iterator,但我不想包含头文件。如果我尝试转发声明该类,则会出现编译错误。

编译上面的代码给出...

如何转发声明这个类,这样我就不必包含声明 Iterator 类的头文件?

0 投票
8 回答
1055 浏览

c++ - 什么时候需要提前申报?

我有这个我正在处理的 C++ 项目。

所有类的实现都与 .h 文件分开。

但是,我不确定为什么/何时需要前向声明。

例如,我刚刚在#included "ClassType.h" 时遇到了一个错误,编译器完全拒绝编译具有指向 ClassType 的指针的类,即使在 "ClassType.h"中明确定义了类 ClassType。

为什么编译器仅仅看到我已经#included“ClassType.h”还不够,为什么它需要前向声明?