问题标签 [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 投票
3 回答
1026 浏览

c++ - C++ 中的前向引用或声明

如何在 C++ 中进行前向引用/声明以避免循环头文件引用?

我在头文件中有#ifndef 保护,但记忆告诉我我需要这个前向引用的东西——我以前用过 >< 但不记得怎么用了。

0 投票
10 回答
3685 浏览

c++ - 当您不想 #include 时替代转发声明

我通常几乎不加思索地使用前向声明,这样我就不必包含标题。这个例子中的一些东西:

一些开发人员喜欢使用这种方法来避免包含圈的问题。我宁愿用它来最小化广泛包含层次结构中的开销,这是物理设计的重要部分(特别是对于较大的项目)。

但是,在某些情况下,我真的很喜欢将成员声明为普通对象而不是指针,以从自动构造/销毁机制中受益。这导致不能再使用前向声明的问题,因为在这种情况下编译器需要类定义,例如:

所以,如果有人知道可以在这里使用的替代语言结构,我会很高兴,这样我就可以声明“foo_object”,如示例中所示,但不包括其标题。

问候

/罗伯特

0 投票
2 回答
734 浏览

.net - 前向声明问题

我正在使用 C++ .NET 2.0

我有 2 个表格

第一个声明如下

第二个是这样的

在 stdafx.hi 中有

现在问题来了!SubForm 中的行导致编译器告诉我“使用未定义类型 myNamespace::frmMain

我真的不知道为什么“ref class frmMain”不能解决这个问题

0 投票
6 回答
16677 浏览

c++ - 基类的前向声明

我正在尝试创建适当的头文件,其中不包含太多其他文件以保持它们清洁并加快编译时间。

我在执行此操作时遇到了两个问题:

  1. 基类的前向声明不起作用。

    /li>
  2. STD 类的前向声明不起作用。

    /li>

我该如何解决这些问题?

0 投票
13 回答
274734 浏览

c++ - 我什么时候可以使用前向声明?

我正在寻找何时允许在另一个类的头文件中对一个类进行前向声明的定义:

我是否可以为基类、作为成员的类、通过引用传递给成员函数的类等执行此操作?

0 投票
4 回答
21121 浏览

c++ - 模板:使用前向声明来减少编译时间?

我必须处理一个由许多模板类组成的库,这些类当然都是在头文件中实现的。现在我试图找到一种方法来减少无法忍受的长编译时间,因为我几乎必须将整个库包含在我的每个编译单元中。

尽管有模板,但是否有可能使用前向声明?我正在尝试按照下面示例的方式进行操作,例如,我试图绕过#include <vector>, 但它给了我一个链接器错误,因为push_back它是未定义的。

我曾经尝试过预编译的头文件,但这根本没有改变编译时间(我确实确保它们确实被加载而不是真正的头文件)。但是如果你们都说预编译的头文件应该是要走的路,那么我会再试一次。

更新:有些人说前向声明 STL 类是不值得的。我要强调的是,vector上面的 STL 只是一个例子。我并没有真正尝试前向声明 STL 类,但它是关于我必须使用的某些库的其他大量模板化的类。

更新2:有没有办法让上面的例子真正编译和链接正确?洛根建议使用-fno-implicit-templates并放在template class std::vector<int>某个地方,大概是一个单独的.cpp文件,用 . 编译-fno-implicit-templates,但我仍然得到链接器错误。同样,我试图了解它是如何工作的,std::vector以便我可以将它应用到我实际使用的模板类中。

0 投票
3 回答
1535 浏览

c++ - 为什么 C++ 模板可以让我规避不完整的类型(前向声明)?

我尝试了以下简单程序的三个迭代。这是编写容器和迭代器对类的高度简化的尝试,但我遇到了不完整类型(前向声明)的问题。我发现一旦我将所有内容都模板化,这实际上是可能的——但前提是我实际使用了模板参数!(我通过查看Google sparsetable code意识到了这一点。)

任何提示解释为什么第二个有效而第三个无效?(我知道为什么第一个不起作用——编译器需要知道容器的内存布局。)

提前致谢。

0 投票
5 回答
4260 浏览

c++ - 在 C++ 中前向声明指向结构的指针

我正在使用具有如下声明的 3rd 方库:

我想创建一个在构造函数中采用HandleType的类:

包括定义HandleType的标头。通常,我只是前向声明这种类型,但我无法弄清楚它的语法。我真的很想说:

但这在 GCC 中表示“* 之前的预期标识符”。我能看到的唯一解决方案是像这样编写我的类:

但这依赖于库的内部细节。也就是说,它使用名称__INTERNAL_DATA,这是一个实现细节。

似乎应该可以在不使用 __INTERNAL_DATA (库实现的一部分)的情况下前向声明 HandleType (公共 API 的一部分)。有人知道怎么做吗?

编辑:添加了有关我正在寻找的内容的更多详细信息。

0 投票
1 回答
1287 浏览

c - 在 C89 中转发声明 typedef 结构的更好方法?

以上方法有效,但有更简单(或更好)的方法吗?

0 投票
3 回答
21561 浏览

forward-declaration - 前向引用与前向声明

我有点困惑。前向声明和前向引用有什么区别?在我看来,前向声明是当你声明一个尚未实现的函数时,但这不正确吗?您是否必须查看特定情况以声明案例“前向引用”或“前向声明”?