массивы — ошибка C ++ — нет соответствия для оператора =

class RLE_v1
{
struct header
{
char sig[4];
int fileSize;
unsigned char fileNameLength;
std::string fileName;
} m_Header;

RLE<char> m_Data;

public:
void CreateArchive(const std::string& source)
{
std::ifstream::pos_type size;
char* memblock;
std::ifstream file (source, std::ios::in|std::ios::binary|std::ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [static_cast<unsigned int>(size)];
file.seekg (0, std::ios::beg);
file.read (memblock, size);
file.close();
//
// trying to make assignment to m_Data here.
//
delete[] memblock;
}
}

void ExtractArchive(const std::string& source);
};

Я пытаюсь скопировать данные из массива «memblock» в переменную m_Data, но когда я пытаюсь это сделать, я получаю сообщение об ошибке no match for operator "=" matches these operands, Я понятия не имею, как сделать их равными, потому что m_Data уже типа char,

Это класс RLE с переменной m_Data в качестве mem

template <typename T>
struct RLE
{

T* m_Data;  // Memory which stores either compressed or decompressed data
int m_Size; // Number of elements of type T that data is pointing to

RLE()
: m_Data(nullptr)
, m_Size(0)
{ }

~RLE()
{
delete m_Data;
}
};

0

Решение

Вы показали все, кроме фактической строки, которая выдает ошибку.

Но то, что я вижу, это. У вас есть класс, в котором есть член:

RLE<char> m_Data;

После расширения шаблона эта структура будет иметь член:

char *m_Data;

Вы говорите, что нет operator= когда вы назначаете memblock в m_Data, Поэтому я могу только заключить, что вы делаете это:

m_Data = memblock;

Где вы должны на самом деле делать это:

m_Data.m_Data = memblock;
m_Data.m_Size = size;

Вместо того, чтобы напрямую работать с внутренними структурами структуры, вам лучше создать функцию:

template <typename T>
void RLE<T>::Alloc( size_t size )
{
if( m_Data != nullptr ) delete [] m_Data;
m_Data = new T [size];
m_Size = size;
}
1

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

Других решений пока нет …

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