ios_base类的C++未声明标识符
C++ Undeclared Identifier for ios_base Class
我有以下头文件。这在VS2010和VS2013中编译良好,但现在在VS2015 中失败
#ifndef UTILITY_IOS_STATE_H
#define UTILITY_IOS_STATE_H
#include <iosfwd>
template <class Value>
struct SetPrecision
{
SetPrecision(int precision, const Value& value) : _precision(precision), _value(value) {}
const int _precision;
const Value _value;
};
template <class Value>
inline SetPrecision<Value> precision(int precision, const Value& value) {
return SetPrecision<Value>(precision, value);
}
template <class Value>
std::ostream& operator<<(std::ostream& out, const SetPrecision<Value>& p)
{
std::streamsize precision = out.precision();
out.precision(p._precision);
out << p._value;
out.precision(precision);
return out;
}
template <class Value>
struct SetFixedPrecision
{
SetFixedPrecision(int precision, const Value& value) : _precision(precision), _value(value) {}
const int _precision;
const Value _value;
};
template <class Value>
inline SetFixedPrecision<Value> fixedPrecision(int precision, const Value& value) {
return SetFixedPrecision<Value>(precision, value);
}
template <class Value>
std::ostream& operator<<(std::ostream& out, const SetFixedPrecision<Value>& p)
{
std::streamsize precision = out.precision();
std::ios_base::fmtflags flags = out.flags();
out.precision(p._precision);
out.setf(ios_base::fixed, ios_base::floatfield);
out << p._value;
out.flags(flags);
out.precision(precision);
return out;
}
#endif /* UTILITY_IOS_STATE_H */
违规的线路是:
out.setf(ios_base::fixed, ios_base::floatfield);
编译器错误都是关于"c:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\siosbase"中的类ios_base(以前是"c:\Program File(x86)\Microsoft Visual Studio 12.0\VC\include\siosbbase")。错误都是
严重性代码描述项目文件行禁止显示状态错误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是一个未声明的标识符。
我很困惑为什么会出现这种情况,这是因为参考文献中的歧义吗?如果没有,为什么会出现此错误,以及如何修复?
谢谢你抽出时间。
它需要是std::ios_base
,就像函数中的其他ios_base
引用一样。
不能只包含<iosfwd>
,而不能使用流。发布的代码根本不应该编译。<iosfwd>
仅用于流无类的引用,不支持插入器调用。对于您的代码,您应该包括<iostream>
。
相关文章:
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 我的函数调用 (C++) 中的未声明标识符
- 具有继承的未声明标识符(运算符 ostream)
- 无法确定 IDE 在 C++ 中说出未声明标识符的原因
- 错误 C2065:'lO':用于声明向量值的未声明标识符?
- 可变参数模板的未声明标识符
- 动态变量上的c++MACRO未声明标识符
- 指向对象的指针的未声明标识符向量
- 简单C++程序上的多个未声明标识符
- C++类"未声明标识符"
- 计算文本文件中的整数数(使用 fin>>x 的未声明标识符)
- 编译器错误 xcode 未声明标识符 C++
- 直接 X 11 纹理 FX 文件错误 X3004 未声明标识符"input"
- GCC 未声明标识符"_asm"
- ios_base类的C++未声明标识符
- 未声明标识符SQL_SS_TABLE
- 使用arrayfire的未声明标识符
- 未声明标识符和标识符未定义是什么意思?如何修复错误
- 在 MacOS 上使用 OpenMPI C++语法时未声明标识符'MPI'