Ошибка C2512: 'std:: basic_ostream<_Elem, _Traits>': соответствующий конструктор по умолчанию недоступен только в Visual Studio
Я задаю этот вопрос, потому что я немного беспомощен: эта ошибка возникает ТОЛЬКО с Visual Studio, GCC компилирует ее без ошибок или даже предупреждений. Поскольку это некоторый переносимый код, я ищу решение, которое работает с обоими компиляторами (и в лучшем случае без зависимости от платформы). ifdefs
).
ошибка C2512: 'std:: basic_ostream<_Elem, _Traits>': соответствующий конструктор по умолчанию недоступен
происходит при создании объекта типа MyObject, который определен как
class MyObject : public Socket, public std::ostream
Что особенного ostream
параметры ожидаются VS здесь?
1 ответ
std::ostream
это псевдоним типа для std::basic_ostream<char>
, Конструктор std::basic_ostream<char>
ожидает указатель на буфер потока, с которым связан выходной поток. Вы должны предоставить один.
Подпись конструктора следующая:
explicit basic_ostream( std::basic_streambuf<CharT, Traits>* sb );
Ваш конструктор класса должен выглядеть примерно так:
class MyObject : public Socket, public std::ostream
{
MyObject(/* ... */)
:
std::ostream(/* provide a ptr to a stream buffer here /*)
// ...
{
// ...
}
};
Также смотрите это для справки.