问题标签 [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 回答
877 浏览

c++ - 多源目录前向声明;模板实例化

我正在寻找一本好书,参考材料,它处理类的前向声明,尤其是。当源位于多个目录中时,例如。dirA 中的 A 类在 dirB 中的 B 类中前向声明?这是怎么做的?

此外,对于模板问题、高级用途和实例化问题的任何材料,是否受到高度评价?

谢谢。

0 投票
1 回答
503 浏览

python - 前向声明 - django 中没有管理页面?

这可能是一个数据库设计问题,但我想不出更好的办法。在其他几个中,我有这些模型:

所以基本上,我有一个用户实体,它与乐队实体有多对多的关系。转折是我想要一个特殊的用户,他在网站上“创建”了乐队,以拥有特殊的编辑能力。于是我往前走,添加了一个名为 creator 的外键。代码无法运行,因为 Band 在源代码中位于 User 之后。所以我转发声明class Band(models.Model): pass。遗憾的是,这似乎不是一个好主意,因为现在 Band 是唯一一个在 django admin 中不显示任何界面元素的模型(Bands 模型在那里,只是无法编辑)。

我的问题是,我应该对模型进行哪些更改才能使其正常工作?(如有)

0 投票
2 回答
463 浏览

c++ - 我如何转发声明一个已被 typedef 的类?

我有一个字符串类,不出所料,它使用不同的实现,具体取决于是否启用了 UNICODE。

这很好用,但我目前有一个问题,我需要转发声明 StringT typedef。我怎样才能做到这一点?

我不能这样做typedef StringT;,这使得前向声明变得棘手。是否可以对这种类型定义的类型进行前向声明,而不必将上面的代码传递到头文件的顶部?

0 投票
2 回答
13843 浏览

c++ - C++ 类前向声明​​的缺点?

我想在我的软件中使用类的前向声明,所以我可以有 typedef
并在类完整声明中使用它们。

像这样:

所以我的问题是:这种方法有什么缺点吗?我记得一些关于前向声明的析构函数问题的讨论,但我并没有把所有东西都拿出来。
或者有没有其他选择来实现这样的事情?

谢谢。

编辑:我找到了我所指的讨论:这里

0 投票
4 回答
2492 浏览

c++ - 有没有办法转发声明协方差?

假设我有这些抽象类FooBar

进一步假设我有派生类ConcreteFooConcreteBar. 我想协变地改进foo()bar()方法的返回类型,如下所示:

这不会编译,因为我们心爱的单通道编译器不知道ConcreteBar它将继承自Bar,因此这ConcreteBar是一个完全合法的协变返回类型。简单的前向声明ConcreteBar也不起作用,因为它不会告诉编译器任何有关继承的信息。

这是我必须忍受的 C++ 的一个缺点,还是实际上有办法解决这个困境?

0 投票
5 回答
3657 浏览

c++ - 前向声明和模板函数错误

目前我对前向声明和模板函数有一个令人沮丧的问题。我一直在尝试谷歌搜索并进行一些修改,但到目前为止没有任何效果。以下是代码片段:

这是我得到的错误消息,它也显示在代码中:./bt-taskscheduler.h:159: error: forward declaration of 'struct TaskScheduler' ./bt-taskscheduler.h:229: error:不完整类型'struct TaskScheduler'的无效使用</p>

谁能告诉我这段代码出了什么问题?任何帮助表示赞赏..

0 投票
1 回答
1738 浏览

c++-cli - 如何在 C++/CLI 中转发声明属性?

我在 C++/CLI 中有一个类,我想提供一个属性。我想在头文件中声明该属性,然后在 .cpp 文件中实现该属性。

这是标题:

如果我声明头文件并且不在 cpp 中放置任何内容,我会收到以下错误:

由此我得出结论,我应该将该属性实现为

但是,当我编译这段代码时,我得到了一堆错误。第一个错误(其他错误是第一个错误的结果)是:

任何人都可以对这个问题有所了解吗?

0 投票
3 回答
5327 浏览

c++ - 有没有更短的方法来转发在命名空间中声明一个类?

我可以通过这样做在命名空间中转发声明一个函数:

这相当于:

在命名空间中转发声明一个类:

有没有更短的方法来做到这一点?我在想一些事情:

0 投票
4 回答
3903 浏览

c++ - C++ 类依赖

我的班级有一些问题,因为它们都相互依赖,如果没有声明另一个,就不能声明一个。

如您所见,“块”类需要知道“板”是什么,反之亦然。提前致谢!

0 投票
2 回答
992 浏览

c++ - 转发 typedef 声明、对构建时间的影响和命名约定

我很好奇我的 typedef 方法对我的构建的影响。

请考虑以下示例。

每当我遇到上述情况时,都会将 typedef 驱动到头文件中,因此需要我将其 #include 到头文件中。我担心缺少前向声明可能会导致更长的构建时间。

根据这篇文章的评论:

C++ 中 typedef 的前向声明

我可以转发声明类,typedef 引用或指针,然后在 .cpp 文件中 #include。这应该允许更快的构建时间。我对此的结论是否正确?

如果是这样,我最终会得到这样的 typedef:

这对我来说看起来不是很干净的代码,我想我已经阅读了反对这个的文章/帖子(不一定是 SO)。

你觉得这可以接受吗?更好的选择?


更新:使用 Michael Burr 的回答,我只能解决指针和引用的情况。但是,在我的函数中尝试使用 sizeof() 时遇到了问题。例如,假设该类具有以下功能:

或者,这会起作用。

我正在使用 Microsoft Visual C++ 6.0。这是编译器的错误还是通常违反标准?

在有错误的示例中,请注意 sizeof(SomeClass) 是正在被 typedef 的原始类,而不是在 Foo 中创建的新 typedef 类型。我很惊讶通过在 typedef 中进行前向声明限制了我对作为 typedef 的类执行任何操作的能力。


跟进:刚刚使用 XCode 编译器对其进行了测试,我相信我的 sizeof 问题是 Visual C++ 6.0 编译器问题。我猜 XCode 编译器可能是正确的,但我目前没有其他尝试。因此,虽然这提供了信息,但我个人对我目前的任务不走运,因为最佳答案不适用于我的情况。