Ошибка 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 /*) 
    //  ...
    {
        // ...
    }
};

Также смотрите это для справки.

Другие вопросы по тегам