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

标签 c++ visual-studio-2010 visual-studio-2012 visual-studio-2015 iosfwd

<分区>

我有以下头文件。这在 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\xiosbase”中的类 ios_base(这曾经是“c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xiosbase”)。错误都是

Severity Code Description Project File Line Suppression State Error C2065 'floatfield': undeclared identifier MyProject F:\MyProject\src\utility\ios_state.h 51

Severity Code Description Project File Line Suppression State Error C2653 'ios_base': is not a class or namespace name MyProject F:\MyProject\src\utility\ios_state.h 51

和同一条线上的其他 21 个人都提示 ios_base 是一个未声明的标识符。

我对为什么会出现这个问题感到困惑,这是由于引用文献中的歧义吗?如果不是,为什么会出现此错误,我该如何解决?

感谢您的宝贵时间。

最佳答案

它需要是 std::ios_base,就像函数中的其他 ios_base 引用一样。

关于ios_base 类的 C++ 未声明标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34140993/

相关文章:

c++ - C++程序在Visual Studio 2010中编译,但不能在Mingw中编译

c++ - C++ typeid。如何指向派生类?

C++ 字符串差异(la Python 的差异库)

visual-studio-2010 - 为什么有些Web.config转换将标记化为SetParameters.xml,而另一些却没有?

vb.net - 针对 Access 数据库的 Update 语句中的语法错误(使用 OleDbCommandBuilder)

c++ - 未初始化的枚举器默认值

asp.net - 播放视频时服务器出错 : HTTP Error 404. 3

asp.net - 使用 Visual Studio Online 和 Azure 虚拟机持续交付到 Azure

c++ - Visual Studio 2012 Update 3 - 初始化列表和可变参数模板

C#保龄球游戏计算问题