forward-declaration相关内容
当我尝试此示例时: template concept only_int = std::same_as; int add_ints(only_int auto&&... args) { return (std::forward(args) + ... + 0); } 它起作用了……但当我只这样声明的时候:
..
我最近一直在尝试使用GCC 11将一个代码库转换为C++20模块。然而,我在以下情况下卡住了。首先,下面是使用Header的方法: A.H class B; class A { public: void f(B& b); }; A.cpp #include "A.h" #include "B.h" void A::f(B& b) { //
..
在:http://www.learncpp.com/cpp-tutorial/19-头文件/ 以下提到: 添加.cpp: int add(int x, int y){返回 x + y;} main.cpp: #include int add(int x, int y);//使用函数原型的前向声明主函数(){使用命名空间标准;cout 您能进一步解释“前向声明
..
我定义了两个模型,每个模型相互引用,如下所示: 类用户(models.Model):# ...喜欢 = models.ManyToManyField(Article, related_name='loved_by')类文章(models.Model):# ...作者 = 模型.外键(用户) 你看,问题是两个类相互引用.无论这两个类以什么顺序实现,python总是引发NameError异常,抱怨
..
我可以通过这样做在命名空间中转发声明一个函数: void myNamespace::doThing(); 相当于: 命名空间 myNamespace{无效做事();} 在命名空间中转发声明一个类: 命名空间 myNamespace{类我的类;} 有没有更短的方法来做到这一点?我的想法是这样的: class myNamespace::myClass; 解决方案 不,但是需要重新格式
..
假设我有一个类 F 应该是类 G(在全局命名空间中)和 C(在命名空间 A). 要成为 A::C 的朋友,F 必须前向声明. 要成为G的朋友,F的前向声明是不必要的. 同样,类 A::BF 可以成为 A::C 的朋友,无需前向声明 以下代码说明了这一点,并可以使用 GCC 4.5、VC++ 10 以及至少一个其他编译器进行编译. 类 G {F类朋友;整数克;};//如果没有这个前
..
我正在编写一个 C++ 头文件,我在其中定义了一个 A 类 {//...}; 我想对外界隐藏(因为它可能会在此标头的未来版本中更改甚至被删除). 在同一个头文件中还有一个 B 类,它有一个 A 类的对象作为成员: B 类 {上市://...私人的:一个a_;}; 什么是对外界隐藏A级的正确方法? 如果我将 A 的定义放在未命名的命名空间中,编译器会发出警告,因此我假设由于内部链
..
当我在头文件中声明一个函数,并将该函数的定义放在其他文件中时,编译器/链接器如何找到定义?它会系统地搜索其路径中的每个文件,还是有更优雅的解决方案?这几天一直困扰着我,一直找不到解释. 解决方案 编译器不做这个,链接器做. 当编译器一次处理一个源文件时,当调用链接器时,它会传递编译器生成的所有目标文件的名称,以及用户希望链接的任何库的名称.因此,链接器完全了解可能包含该定义的文件集,
..
我必须处理一个由许多模板化类组成的库,这些类当然都是在头文件中实现的.现在我正试图找到一种方法来减少无法忍受的长编译时间,因为我几乎必须在我的每个编译单元中都包含整个库. 尽管有模板,是否可以使用前向声明?我正在尝试按照以下示例的方式进行操作,我试图绕过 #include ,作为示例,但它给了我一个链接器错误,因为 push_back 未定义. #include 命名空间标
..
我定义了两个模型,每个模型都引用另一个模型,如下所示: class User(models.Model):# ...love = models.ManyToManyField(文章,related_name='loved_by')类文章(模型.模型):# ...author = models.ForeignKey(用户) 你看,问题是两个类相互引用.无论这两个类以什么顺序实现,python 总
..
如何调用需要从其创建之上调用的函数?我读了一些关于前向声明的内容,但谷歌在这种情况下没有帮助.什么是正确的语法? 解决方案 Lua 是一种动态语言,函数只是一种可以用 () 运算符调用的值.所以你真的不需要提前声明函数,只要确保调用它时作用域中的变量就是你认为的变量即可. 对于包含函数的全局变量来说,这根本不是问题,因为全局环境是查找解析变量名称的默认位置.然而,对于局部函数,你需要
..
我只是不明白为什么枚举的大小与编译器相关,而类的大小则不然. 我的代码示例: A类;枚举 E;//必须是枚举 E : int;为了编译void f(const A & param);void f(const E & param); 我在这里谈论的是标准 C++ 编译器.我知道 MSVC 让它编译并正常工作.所以问题是: 为什么没有标准化? 解决方案 这个已经标准化了,提案
..
悬赏问题: 所以,这两个 Foo 不是一回事.美好的.第二种形式是在图书馆中给出的.鉴于我无法更改它,我该如何提前声明它? 我一直认为 C 和 C++ 允许重复声明,前提是没有重复定义.然后我在尝试编写扩展 C 库的 C++ 代码时遇到了这个问题. struct Foo;typedef struct {} Foo; 出现以下错误: 'struct Foo' 先前声明为 'struc
..
我在一个类的 C++ 前向声明中发现了一个错误,它被错误地声明为 struct Book 而不是 class Book.我认为 Book 曾经是一个结构体,后来变成了一个类,但前向声明仍然存在. Book.h: class Book {...}; 库.h: struct Book;类库{std::vector图书;}; 没有编译器警告,生成的程序似乎运行良好.这让我很好奇:理论上,这
..
#include 结构上下文;结构函数{无效(*func0)(上下文*ctx);无效(*func1)(无效);};结构上下文{funcptrs fps;};void func1 (void) { printf("1\n");}void func0 (context *ctx) { printf("0\n");}void getContext(context *con){骗局=?;//请用一个虚拟示
..
正如在此处所讨论的, 函数定义可以在定义之前使用.但是一旦一段代码被包含在一个 try 块中,情况就不再是这样了. 这会显示“Hello world": hello();功能你好(){警报(“你好世界");} 但这会显示“ReferenceError: hello is not defined": 尝试{你好();功能你好(){警报(“你好世界");}} 抓住(错误){警报(错误);}
..
我知道我可以做到: class Foo; 但是我可以转发声明一个类从另一个类继承,例如: class Bar {};Foo 类:公共酒吧; 一个示例用例是协变引用返回类型. //某处.h类 RA {}RB 类:公共 RA {} ... 然后在另一个不包含 something.h 的标题中 //other.hRA 类;A类{上市:虚拟 RA* Foo();//这只需要向前减速}RB 类
..
我遇到了一个似乎非常经典的问题:一个项目和一个集合类,两者都相互引用,需要一个前向声明.我使用的是带有更新 5 的 Delphi 2010. 这适用于非泛型类,但我无法解决泛型类型的 E2086 错误: 类型//前向声明TMyElement = 类;//E2086: 类型 'TMyElement' 尚未完全定义TMyCollection= 班级//结尾;TMyElement = 类FPar
..
当我尝试编译这段代码时,我得到: 52 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h 未定义类型`struct tile_tree_apple'的无效使用46 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h `struct tile_tree_apple' 的前向声明 我的部分代码: class tile_tree_apple;t
..
我最近陷入了这样的境地: A 类{民众:typedef 结构/类 {…} B;…C::D *someField;}C级{民众:typedef 结构/类 {…} D;…A::B *someField;} 通常你可以声明一个类名: A类; 但是不能前向声明嵌套类型,以下会导致编译错误. class C::D; 有什么想法吗? 解决方案 你做不到,这是 C++ 语言的一个漏洞.您必须
..