C++ C++;错误—;没有接线员的对手=

C++ C++;错误—;没有接线员的对手=,c++,arrays,casting,operands,C++,Arrays,Casting,Operands,您已经显示了除了产生错误的实际行之外的所有内容 但我看到的是这个。您有一个包含以下成员的类: 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()

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

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

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;
当您将
memblock
分配给
m_Data
时,您说没有
operator=
。因此,我只能得出结论,你正在这样做:

char *m_Data;
m_Data = memblock;
你应该在哪里做这件事:

char *m_Data;
m_Data = memblock;
与其直接在结构的内部操作,不如创建一个函数:

m_Data.m_Data = memblock;
m_Data.m_Size = size;
模板
void RLE::Alloc(大小)
{
如果(m_Data!=nullptr)删除[]个m_数据;
m_数据=新的T[尺寸];
m_尺寸=尺寸;
}

为什么应该是m.Data.m_数据?对不起,我有点困惑,是的,我试着做m_data=memblock;产生错误的那一行是我说的“我试图复制数据…”对不起。+1我猜如果后面紧接着是
delete[]memblock
,那么将指针保存到
RLE
中可能毫无价值。根据你的Alloc建议,更重要的是:
RLE::ReadStream(ifstream&inf,size\u t size)
可能同样有用。哈哈,很好的观点@WhozCraig-希望你在听,用户1665569。在复制指针并打算将所有权传递给其他人之后,不要再去删除它。复制指针不会复制内存。如果删除内存,所有指向该内存的指针都将变得毫无价值。@user1665569 paddy有正确的答案和一些好的建议,我将在这里留下一个小约会:使用a来解决这个问题,很多问题就会消失。