问题标签 [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.
c++ - C++ 棘手的继承类定义问题
在处理包括彼此在内的多个类时出现此错误:
我知道发生了什么,但我不知道如何正确纠正它。这是代码的抽象版本:
啊
A.cpp
溴化氢
B.cpp
Jh
J.cpp
克
K.cpp
主文件
从main.cpp开始,我可以确定这是编译器看到的:
因此,当我们到达B时, A的定义并不完整。有人告诉我,有时您需要使用前向声明,然后将#include语句移动到.cpp文件中,但我对此没有任何运气。如果我尝试这样的事情,我只会得到额外的错误:
我想也许我只是没有在正确的地方做事。有人可以告诉我如何编译这段代码吗?非常感谢你!
编辑:我想指出这只是真实代码的抽象版本。我意识到在A中没有对K或J中的B的引用,但是在真实的代码中有,我觉得它们是完全必要的。也许如果我对真实类进行简要描述,有人可以帮助我重组或修复我的代码。
A类是一个抽象节点类,充当图中节点的接口。B类是A的许多不同实现之一。同理,J类是一个抽象的Visitor类,K是对应的实现。这是具有更多上下文的代码:
啊(抽象节点)
A.cpp
Bh(具体节点)
B.cpp
Jh(抽象访问者)
J.cpp
Kh(具体访客)
K.cpp
主文件
我必须添加一些前向声明以使出现的一些额外错误(当我添加细节时)消失。其中一些可能不是必需的或不正确的。
c++ - 是否值得提前声明库类?
我刚刚开始学习 Qt,使用他们的教程。我目前正在学习教程 7,我们在其中创建了一个新的 LCDRange 类。LCDRange(.cpp文件)的实现使用Qt QSlider类,所以在.cpp文件中是
但在标题中是一个前向声明:
根据 Qt,
这是另一个经典技巧,但使用频率要低得多。因为我们在类的接口中不需要QSlider,只在实现中,我们在头文件中使用类的前向声明,并在.cpp文件中包含QSlider的头文件。
这使得大型项目的编译速度更快,因为编译器通常将大部分时间用于解析头文件,而不是实际的源代码。仅此一项技巧通常可以将编译速度提高两倍或更多。
这值得做吗?这似乎是有道理的,但还有一件事需要跟踪——我觉得将所有内容都包含在头文件中会简单得多。
c++ - C++ 中 typedef 的前向声明
为什么编译器不让我转发声明 typedef?
假设这是不可能的,保持我的包含树小的最佳做法是什么?
c++ - 在 C++ 中前向声明一个类的公共 typedef
我试图通过使用前向声明并将#includes移动到实现文件中来简化一堆头文件“包括意大利面条”。但是,我不断遇到以下情况:
我想在尽可能多的情况下删除#include "Bar.h"。我还看到 Bar.h 中的 typedef 列在 Bar 类之外的情况。我假设这两种情况都可以以相同的方式解决。
有任何想法吗?
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:
?
c++ - 在堆上创建对象需要对象的大小吗?
当编译器需要知道 C(类)对象的大小时:例如,在堆栈上分配 C 或作为另一种类型的直接持有成员时
来自C++ 编码标准:101 条规则、指南和最佳实践
这是否意味着对于堆分配的对象,大小不是必需的?
c++ - C++ 中嵌套类型/类的前向声明
我最近陷入了这样的情况:
通常你可以声明一个类名:
但是不能前向声明嵌套类型,以下会导致编译错误。
有任何想法吗?
.net - 如何在 C++/CLI 中转发声明委托?
如何?
以下没有工作:
申报工作如下:
但是使用它作为前向声明给了我
c++ - 如何转发声明内部类?
我有这样的课...
在其他地方,我想通过引用传递一个 Container::Iterator,但我不想包含头文件。如果我尝试转发声明该类,则会出现编译错误。
编译上面的代码给出...
如何转发声明这个类,这样我就不必包含声明 Iterator 类的头文件?
c++ - 什么时候需要提前申报?
我有这个我正在处理的 C++ 项目。
所有类的实现都与 .h 文件分开。
但是,我不确定为什么/何时需要前向声明。
例如,我刚刚在#included "ClassType.h" 时遇到了一个错误,编译器完全拒绝编译具有指向 ClassType 的指针的类,即使在 "ClassType.h"中明确定义了类 ClassType。
为什么编译器仅仅看到我已经#included“ClassType.h”还不够,为什么它需要前向声明?