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

标签 c++ arrays casting operands

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/

相关文章:

c++ - 如何在 visual studio 中有条件地链接静态库

java - 如何修复我的子类循环,使其在主类中调用时仅循环一次?

arrays - 从命令行读取值到数组

c# - 结合 C 和 C#。结构的

Scala 转换为泛型类型(用于泛型数值函数)

c++ - 返回引用时,gcc 将 0x30 添加到 %eax

c++ - QT - 指向全局内存的指针

C++:一种在分隔变量定义和测试的 if 语句中声明一个变量(或多个变量)的方法?

arrays - 如何找到 numpy 数组中存在的最大值?

java - 类层次结构和对象之间的转换