问题标签 [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.
c++ - 是什么标题?
<iosfwd>
标头是做什么用的?为什么有必要?
有什么例子吗?
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 得到了它。
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 是一个未声明的标识符。
我很困惑为什么会出现这种情况,这是由于参考文献中的含糊不清吗?如果没有,为什么我会收到此错误,我该如何解决?
谢谢你的时间。
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”,它也会出错)。然后我的程序运行成功。那么,视觉工作室的秘密是什么。
c++ - 如何保证不包含 iostream?
#include <iosfwd>
在头文件中并且 #include <iostream>
仅在 cpp 文件中被认为是最佳实践。#include <iostream>
我正在尝试在现有项目中将大量从标头文件移动到 cpp 文件。
有没有办法保证#include
依赖树中没有文件有#include
-d <iostream>
?理想情况下,编译失败的方式,比如static_assert
.
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
。