簡體   English   中英

C ++錯誤-運算符不匹配=

[英]C++ error — No match for operator =

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” char數組中的數據復制到變量m_Data中,但是當我嘗試執行此操作時,我得到一個錯誤,即no match for operator "=" matches these operands 我不知道如何使它們相等,因為m_Data已經是char類型。

這是RLE類,具有變量m_Data作為內存

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;

你說有沒有operator=當你將memblockm_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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM