问题标签 [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++ 中“前向声明”什么?
我知道我能做到
并且可能
和全局函数
那么类型化的枚举呢?未声明的类中的类型化枚举呢?带有未声明类的函数呢?未声明的类中的静态成员呢?这些在未知命名空间中的情况如何?我是否遗漏了其他可以提前声明的内容?
c++ - 什么时候需要一个空的命名空间定义?
命名空间不像大多数其他事物那样被声明和定义,但命名空间等价于前向声明将是:
通常,您通过在其中放置其他声明来定义命名空间。但是这个“命名空间前向声明”是最简单的解决方案吗?空的命名空间有什么用?
android - android 前向声明在 1.6 中不起作用
根据官方网站,Android 从 1.6 版本开始支持前向声明。
在 manifest.xml 中将 min SDK 和目标 SDK 要求都调整为“4”后,eclipse 的布局编辑器仍然抱怨相对布局中的未知声明:
在此行找到多个注释:
ERROR 错误:未找到与给定名称匹配的资源(位于“layout_above”,值为“@id/ChkBoxSavePwd”)。
ERROR 错误:未找到与给定名称匹配的资源(位于“layout_alignLeft”,值为“@id/EditTxtServer”)。
清洁/重建没有帮助..有人偶然发现这件事吗?
c++ - 前向声明文件 *
如何FILE *
在 C 中转发声明?我通常使用 来执行此操作struct MyType;
,但自然这似乎是不可能的。
如果 C 标准或编译器和 C++ 之间的行为不同,这也是令人感兴趣的。
更新0
我为什么要这样做:我要问的是如何转发声明非结构/“typedef'd struct”类型,以便我可以声明指向它的指针。显然void *
,在源文件中使用和转换它有点骇人听闻。
c++ - 前向声明包括,在声明包括之上(ClassFwd.h + Class.h)
在 Effective C++(第 3 版)中,Scott Meyers 在第 31 条中建议类应该在其经典的声明 (.h) 和定义 (.cpp) 文件之上具有前向声明包含文件 (fwd.h),不需要完整定义的类可以使用,而不是前向声明自己。
我有点看到它的情况,但我真的不认为这是一个可行的选择......它似乎很难维护,相当矫枉过正而且几乎没有必要。
但是,我可以看到它用于模板前向声明,这是相当繁重的。但是对于简单的课程?似乎维护起来很痛苦,并且会创建大量几乎为空的包含文件,这些文件的用途非常小……值得麻烦吗?
这是一个例子:
我的问题:
你们有什么感想?如果这是一个好习惯?
注意我最感兴趣的是这种做法的论点,看看我是否遗漏了一些能让我同意 Scott Meyers 的东西。
c++ - C++循环引用问题
我有 2 个课程:DataObject
和DataElement
. DataObject
保存指向(仅)DataElement
s 的指针,aDataElement
包含指向多种类型的指针,其中 a DataObject
.
这以前没问题,因为我只使用指向DataObject
s in 的指针,所以在标头中DataElement
的前向声明就足够了。DataObject
DataElement
但是,现在我尝试向 . 添加一个析构函数DataElement
,其中我需要在DataObject
. 对此,编译器说:
我该如何解决这个问题?前向声明显然是不够的,而我不能包含完整的标头DataObject
,因为这又给了我一个循环依赖。
提前致谢!
c++ - 前向声明是行不通的
下面是两个代码片段(准备编译)。在第一个片段中,我只对结构使用前向声明,同时从 Guest 类的基类 dtor 中删除指向该结构的指针,但没有调用。
在第二个片段中,我使用了这个 Guest 类的完整定义,而不是前向声明,使用 Base 中的 delete 来达到预期的效果。
为什么?为什么会有所作为?前向声明不应该只是编译器说明这个类/结构的定义在其他地方的注释吗?
我很惊讶它不能直观地工作。
//第二 - 全高清
c++ - C++ 友元函数参考
我有这种情况(两个类有两个不同的头文件):
bh
啊
基本上A类创建“B”对象。我想授予创建函数 create() 访问权限以修改 B 类的私有成员“x”。我想模拟 C# 中的“内部”关键字,但在更精细的级别上。
我遇到的问题是我最终得到了一个循环标题引用。bh 想追上 ah,但是 ah 想追上 bh 这样做的正确方法是什么?我需要求助于 void* ptrs 吗?由于我只创建一种类型的对象,我认为我不需要工厂模式。希望我错过了一些简单的东西。
c - “名称”的存储大小未知
编译此 .c 源文件时出现此错误
/INIT_SOURCE_BUILD/src/names_list.c:7:错误:“名称”的存储大小未知
这是这个链表的标题
c++ - 为什么类中不需要“使用前声明”规则?
我想知道为什么 C++ 的使用前声明规则在类中不成立。
看这个例子:
如果定义了 BASE,则代码有效。
在 A 的构造函数中,我可以使用尚未声明的 B::foo。
为什么这行得通,而且大多数情况下,为什么只在班级内有效?