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

c++ - 我可以在 C++ 中“前向声明”什么?

我知道我能做到

并且可能

和全局函数

那么类型化的枚举呢?未声明的类中的类型化枚举呢?带有未声明类的函数呢?未声明的类中的静态成员呢?这些在未知命名空间中的情况如何?我是否遗漏了其他可以提前声明的内容?

0 投票
2 回答
2135 浏览

c++ - 什么时候需要一个空的命名空间定义?

命名空间不像大多数其他事物那样被声明和定义,但命名空间等价于前向声明将是:

通常,您通过在其中放置其他声明来定义命名空间。但是这个“命名空间前向声明”是最简单的解决方案吗?空的命名空间有什么用?

0 投票
1 回答
1383 浏览

android - android 前向声明在 1.6 中不起作用

根据官方网站,Android 从 1.6 版本开始支持前向声明。

在 manifest.xml 中将 min SDK 和目标 SDK 要求都调整为“4”后,eclipse 的布局编辑器仍然抱怨相对布局中的未知声明:

在此行找到多个注释:

  • ERROR 错误:未找到与给定名称匹配的资源(位于“layout_above”,值为“@id/ChkBoxSavePwd”)。

  • ERROR 错误:未找到与给定名称匹配的资源(位于“layout_alignLeft”,值为“@id/EditTxtServer”)。

清洁/重建没有帮助..有人偶然发现这件事吗?

0 投票
6 回答
4738 浏览

c++ - 前向声明文件 *

如何FILE *在 C 中转发声明?我通常使用 来执行此操作struct MyType;,但自然这似乎是不可能的。

如果 C 标准或编译器和 C++ 之间的行为不同,这也是令人感兴趣的。

更新0

我为什么要这样做:我要问的是如何转发声明非结构/“typedef'd struct”类型,以便我可以声明指向它的指针。显然void *,在源文件中使用和转换它有点骇人听闻。

0 投票
4 回答
2967 浏览

c++ - 前向声明包括,在声明包括之上(ClassFwd.h + Class.h)

在 Effective C++(第 3 版)中,Scott Meyers 在第 31 条中建议类应该在其经典的声明 (.h) 和定义 (.cpp) 文件之上具有前向声明包含文件 (fwd.h),不需要完整定义的类可以使用,而不是前向声明自己。

我有点看到它的情况,但我真的不认为这是一个可行的选择......它似乎很难维护,相当矫枉过正而且几乎没有必要。

但是,我可以看到它用于模板前向声明,这是相当繁重的。但是对于简单的课程?似乎维护起来很痛苦,并且会创建大量几乎为空的包含文件,这些文件的用途非常小……值得麻烦吗?

这是一个例子:

我的问题

你们有什么感想?如果这是一个好习惯?

注意我最感兴趣的是这种做法的论点,看看我是否遗漏了一些能让我同意 Scott Meyers 的东西。

0 投票
2 回答
3319 浏览

c++ - C++循环引用问题

我有 2 个课程:DataObjectDataElement. DataObject保存指向(仅)DataElements 的指针,aDataElement包含指向多种类型的指针,其中 a DataObject.

这以前没问题,因为我只使用指向DataObjects in 的指针,所以在标头中DataElement的前向声明就足够了。DataObjectDataElement

但是,现在我尝试向 . 添加一个析构函数DataElement,其中我需要在DataObject. 对此,编译器说:

我该如何解决这个问题?前向声明显然是不够的,而我不能包含完整的标头DataObject,因为这又给了我一个循环依赖。

提前致谢!

0 投票
6 回答
3970 浏览

c++ - 前向声明是行不通的

下面是两个代码片段(准备编译)。在第一个片段中,我只对结构使用前向声明,同时从 Guest 类的基类 dtor 中删除指向该结构的指针,但没有调用。
在第二个片段中,我使用了这个 Guest 类的完整定义,而不是前向声明,使用 Base 中的 delete 来达到预期的效果。
为什么?为什么会有所作为?前向声明不应该只是编译器说明这个类/结构的定义在其他地方的注释吗?
我很惊讶它不能直观地工作。

//第二 - 全高清

0 投票
1 回答
1172 浏览

c++ - C++ 友元函数参考

我有这种情况(两个类有两个不同的头文件):

bh

基本上A类创建“B”对象。我想授予创建函数 create() 访问权限以修改 B 类的私有成员“x”。我想模拟 C# 中的“内部”关键字,但在更精细的级别上。

我遇到的问题是我最终得到了一个循环标题引用。bh 想追上 ah,但是 ah 想追上 bh 这样做的正确方法是什么?我需要求助于 void* ptrs 吗?由于我只创建一种类型的对象,我认为我不需要工厂模式。希望我错过了一些简单的东西。

0 投票
3 回答
77140 浏览

c - “名称”的存储大小未知

编译此 .c 源文件时出现此错误

/INIT_SOURCE_BUILD/src/names_list.c:7:错误:“名称”的存储大小未知

这是这个链表的标题

0 投票
4 回答
4026 浏览

c++ - 为什么类中不需要“使用前声明”规则?

我想知道为什么 C++ 的使用前声明规则在类中不成立。

看这个例子:

如果定义了 BASE,则代码有效。

在 A 的构造函数中,我可以使用尚未声明的 B::foo。

为什么这行得通,而且大多数情况下,为什么只班级内有效?