0

次のヘッダーファイルがあります。これは 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")。エラーはすべて

重大度コード 説明 Project File Line Suppression State Error C2065 'floatfield': 宣言されていない識別子 MyProject F:\MyProject\src\utility\ios_state.h 51

重大度コード 説明 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が宣言されていない識別子であると不平を言っています。

なぜこれが表示されたのか混乱していますが、これは参照のあいまいさによるものですか? そうでない場合、なぜこのエラーが発生するのですか?どうすれば修正できますか?

御時間ありがとうございます。

4

2 に答える 2