Visual Studio 2010 — необъявленный идентификатор C ++ для класса ios_base

У меня есть следующий заголовочный файл. Это прекрасно скомпилировано в 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);

Все ошибки компилятора связаны с классом ios_base в «c: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ include \ xiosbase» (раньше это был «c: \ Program Files (x86) \ Microsoft Visual Studio 12.0». \ VC \ включить \ 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

Решение

Это должно быть std::ios_baseкак и другие ios_base ссылки в функции.

1

Другие решения

Вы не можете включить <iosfwd> только и чем пользуются потоки. Код в опубликованном виде не должен компилироваться вообще. <iosfwd> предназначен только для ссылок на потоковые классы и не поддерживает вызов вставок. Для вашего кода вы должны включать <iostream>,

0

По вопросам рекламы [email protected]