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

c++ - 作为函数参数的类型不完整?

我有一个模板类,它使用一个策略作为它的输出和另一个模板参数来确定它的数据成员的类型。此外,构造函数采用指向存储在私有指针中的基类的指针。此对象的函数应采用指向模板类的 this 指针,以使它们能够访问数据。在代码中,这看起来像这样:

ShapeGenerator 是一个接口,应该被实现。它看起来像这样:

如果我用 g++ 4.3.4 (cygwin) 编译它,我会在 ShapeGenerator::generateShape 中得到一个错误'ModelCreater' is not a type。我提出了 ModelCreator 的前向声明,但它没有任何改变。我使用了一些类型和参数的组合,例如只传递了向量,然后我收到一条错误消息,说明了一些关于不完整类型的信息。我想这就是这里的问题。

那么,是否可以在没有特定争论的情况下传递模板类型?如果是这样,怎么做?

编辑: 我没有绑定到 ModelCreator 类型名。如果我必须像模板一样编写它,这不是问题。但我不想在 ShapeCreator 对象中指定 ModelCreator 的类型。那可能吗?

编辑2: 好的,我想我对这个“设计”有点乐观。加入一些配料并喝汤就好了。但是现在盐必须知道锅里的水的种类。我会将模板更改为普通的旧构图。谢谢你们。

0 投票
3 回答
6074 浏览

c++ - C/C++ 编译器如何在头文件中找到原型的定义?

当我在头文件中声明一个函数并将该函数的定义放在其他文件中时,编译器/链接器如何找到定义?它会系统地搜索其路径中的每个文件,还是有更优雅的解决方案?在过去的几天里,这一直困扰着我,我一直无法找到解释。

0 投票
2 回答
5058 浏览

c++ - C++ boost前向声明问题

我花了一些时间研究boost::图书馆架构,并对以下事实感兴趣:

在库的某些部分,一个yyy_fwd.hpp想法非常普遍(参见boost/detailboost/flyweight示例)。

这些文件显然只包含一些基于模板的类的前向声明,据我所知,它们可能会在编译时间方面受益。

有人可以指出他们在什么情况下有帮助,我在设计自己的模板时应该使用相同的想法吗?

谢谢你。

0 投票
3 回答
2906 浏览

c++ - C++ 前向声明和纯虚函数

我在使用前向声明和虚函数时遇到问题。我在编译期间收到以下错误消息。

编译器说这些函数仍然是纯虚函数,但我正确地声明和定义了它们。我不知道问题是什么。

这是我的源代码。

谢谢你。

0 投票
1 回答
369 浏览

c++ - C++中的前向声明

我想转发声明:

但是由于默认模板参数,我的 g++ 婴儿床关于重新定义。我怎样才能做到这一点?

0 投票
1 回答
1077 浏览

iphone - 了解前向声明警告

我正在为 iPhone 应用程序编写 Objective-c 中的第一行。

这是代码:

这样做,我得到一个

警告:未找到协议“ImageFlowScrollViewDelegate”的定义

我可以使用以下方法修复它:

但我想知道为什么前向声明方法给了我一个警告。

0 投票
2 回答
1216 浏览

c++ - C++ 模板化函数和前向声明

我正在使用 MSVC 在 Windows 上编译和链接(甚至发布商业产品)的一些代码。虽然它不能用 GCC 编译,但我收到以下错误:

CBaseValue.h

CValueType.h

我明白为什么这是一个问题。基类 (CBaseValue) 有一个使用派生类(在本例中为 CValueType)的模板化函数。

看起来 MSVC 在这里并不完全遵守 C++ 规范,我只是被它咬了。但是,在调用模板函数的代码实际编译之前使用前向声明的 MSVC 行为现在也更可取。有没有人知道一种解决方法,我可以让这个代码与 GCC 一起工作,而不必重写很多基本代码?

从我自己的研究看来,将“-fno-implicit-templates”传递给 g++ 会有所帮助,但随后我需要显式定义调用的模板类型。它们有很多,所以如果我能避免的话,我会更喜欢它。如果普遍认为这是我最好的选择……那就这样吧!

如果有人想知道,我将代码移植到 Mac 上,这就是我们现在使用 GCC 的原因。

0 投票
6 回答
34443 浏览

c++ - 前向声明与包含

考虑以下两种情况(编辑只是为了完成整个问题并使其更清晰)

案例1:(没有按照下面正确的方式编译)

案例2:(唯一的修改......没有编译错误)

让我们假设 A.cpp 和 B.cpp 一起编译。以上两种情况有什么区别吗?是否有理由更喜欢一种方法而不是另一种?

编辑:那么我如何使方案 1 起作用。

0 投票
4 回答
270 浏览

c++ - C ++转发声明一个类?

在 .h 中,如果我有:

使用 AAAAAA 级;是向前宣布一个班级吗?

为什么要这样做?

需要吗?

有什么好处?缺点?

0 投票
4 回答
15199 浏览

c++ - 变量的前向声明?

我有一些必须移植到 C++ 的 C 代码。代码有一个结构

现在声明和初始化两个全局数组,如下所示:

现在虽然这在 C 中可以正常工作,但在 C++ 中会出现错误(变量重新声明)。在 C++ 中不允许前向声明变量吗?