问题标签 [iosfwd]

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 回答
20678 浏览

c++ - 是什么标题?

<iosfwd>标头是做什么用的?为什么有必要?

有什么例子吗?

0 投票
1 回答
1310 浏览

c++ - 没有这样的文件在 Android Studio 下构建 Botan 时?

我使用 Eclipse 成功地使用链接到这个问题的方向来构建 Botan ,但是,Android Studio 应该取代 Eclipse 进行 Android 开发,所以我现在正试图让它在 Android Studio 中构建,但它失败了缺少头文件<iosfwd>。我收到以下错误:

我应该<iosfwd>从哪里获取头文件以及如何指示 Android Studio 找到它?


更新

我找到了以下生成文件: .../workspace/app/src/main/jni/botan/Android.mk

我尝试在之后添加该行LOCAL_CPPFLAGS

但是构建似乎不受影响,我得到了同样的错误,所以我尝试编辑LOCAL_CPPFLAGS为:

看看我的编辑是否被看到,但同样,在 header 上完全相同的原始失败iosfwd。所以看来我的编辑不是构建的一部分。

如何让 Android Studio 提供更多信息,以便弄清楚它是如何进入失败的构建步骤的。目前,当我构建时,它会暂停,然后给出带有错误消息的窗口,但没有显示所有中间步骤来获得它,这可能会显示哪些 makefile 得到了它。

0 投票
2 回答
1093 浏览

c++ - ios_base 类的 C++ 未声明标识符

我有以下头文件。这在 VS2010 和 VS2013 中编译得很好,但现在在 VS2015 中失败了

违规行是:

编译器错误都是关于 "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xiosbase" 中的类 ios_base (这曾经是 "c:\Program Files (x86)\Microsoft Visual Studio 12.0 \VC\include\xiosbase")。错误都是

严重性代码 描述 项目文件行抑制状态错误 C2065 'floatfield': 未声明的标识符 MyProject F:\MyProject\src\utility\ios_state.h 51

严重性代码 描述 项目文件行抑制状态错误 C2653 'ios_base': 不是类或命名空间名称 MyProject F:\MyProject\src\utility\ios_state.h 51

和同一行的其他 21 人都抱怨 ios_base 是一个未声明的标识符。

我很困惑为什么会出现这种情况,这是由于参考文献中的含糊不清吗?如果没有,为什么我会收到此错误,我该如何解决?

谢谢你的时间。

0 投票
1 回答
545 浏览

c++ - 为什么“hello world”c++ 程序会在 Visual Studio 2015 中引发如此多的“iosfwd”错误?

我刚刚在 Visual Studio 2015 中输入了这个“hello world”c++ 程序:

然后,vs告诉我:

这些错误的来源相同:

好吧,请忽略我的文件路径。但iosfwd似乎是问题的核心?其中一种情况iosfwd是: 错误 C2065 'EOF': undeclared identifier

我正在寻找很长时间。但是没有用。请帮助或尝试提供一些想法如何实现这一目标。提前致谢。


如果我创建一个新Win32 Console Application"的而不是Empty Project, 并使用#include "stdafx.h"(如果我不包括“stdafx.h”,它也会出错)。然后我的程序运行成功。那么,视觉工作室的秘密是什么。

0 投票
1 回答
100 浏览

c++ - 如何保证不包含 iostream?

#include <iosfwd>在头文件中并且 #include <iostream>仅在 cpp 文件中被认为是最佳实践。#include <iostream>我正在尝试在现有项目中将大量从标头文件移动到 cpp 文件。

有没有办法保证#include依赖树中没有文件有#include-d <iostream>?理想情况下,编译失败的方式,比如static_assert.

0 投票
0 回答
45 浏览

c++ - 实现可打印类而不支付 iostream 编译费用?

如果想尽可能避免处理,在 C++ 中实现可打印类的正确方法是什么iostream

这个问题来自iostream,iosfwd与模板之间的交互。

1. 传统方法

据我所知,传统方法是:

我的类.hpp

然而,尽管某些类可以打印,例如用于调试,但并非所有用户都会对打印任何内容感兴趣。这些用户将(在编译时)为永远不会使用的东西付出代价。也就是包含和编译iostream.

(有,iosfwd但它对仅标题没有用。)

2. 模板operator<<

这个我不必包含iostream在头文件中。它还存在operator<<可能返回非标准对象的问题,例如std::ofstream(而不是 base std::ostream)。

对打印感兴趣的用户必须包括iostream自己(并且在某种程度上知道这一点。)

缺点是Ostream可以搭配其他东西。可以将其与iosfwd约束Ostream(例如enable_if<is_base<std::ostream, Ostream>::value>)结合使用。不确定它是否有效。

3.单独MyClass/io.hpp的打印头

添加单独的文件

我的班级/io.hpp

在这种情况下,用户必须包含MyClass/io.hpp才能打印MyClass(并且知道这一点)。

此外,打印私有成员可能需要友谊,为此它需要<iosfwd>在 MyClass.h 中。

boost/units/io.hpp我在图书馆见过这个设计。

4.结合2和3

去完整的模板

我的班级/io.hpp


std::iostream在使用模板和仅标头并iostream尽可能避免编译时,推荐的交互方式是什么?

总之,似乎使用单独的文件可以避免包含<iostream>. 模板和不需要友谊也可以避免iosfwd。受限制的模板或需要友谊的可能仍然需要iosfwd