«Ссылка на удаленную функцию» при использовании конструктора std :: istream - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь создать объект потока памяти для записи в блок памяти, как если бы это был файл (используя удобную функциональность, предоставляемую std :: istream). Основная идея состоит в том, чтобы создать несколько оберток для класса std :: streambuf. * ​​1001 *

Кажется, проблема в том, что я неправильно использую конструктор std :: istream. C ++ жалуется, что ссылается на удаленную функцию.

Я не совсем уверен, что не так с синтаксисом.

inputStream.h

struct IMemBuf : std::streambuf
{
    IMemBuf(const char* base, size_t size);
};

struct IMemStream : virtual IMemBuf, std::istream
{
    IMemStream(const char* base, size_t size);
};

inputStream.cpp

IMemBuf::IMemBuf(const char* base, size_t size)
{
    char* p(const_cast<char*>(base));
    this->setg(p, p, p + size);

}

IMemStream::IMemStream(const char* base, size_t size) : IMemBuf(base,size), std::istream(static_cast<std::streambuf*>(this))
{
}

Точное сообщение об ошибке:

'IMemStream :: IMemStream (const IMemStream&) ': попытка сослаться на удаленную функцию

...