gpt4 book ai didi

C++ 错误 — 运算符 = 不匹配

转载 作者:行者123 更新时间:2023-11-28 07:46:17 25 4
gpt4 key购买 nike

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 类型了。

这是将变量 m_Data 作为内存的 RLE 类

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;
}
};

最佳答案

除了产生错误的实际行之外,您已经显示了所有内容。

但是我看到的是这个。您有一个包含成员的类:

RLE<char> m_Data;

在模板扩展之后,该结构将具有成员:

char *m_Data;

当你将memblock赋值给m_Data时,你说没有operator=。所以我只能断定你是这样做的:

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;
}

关于C++ 错误 — 运算符 = 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com