2013-02-12 41 views
0
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类型。C++的错误 - 不匹配运算符=

这是具有可变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; 
    } 
}; 

回答

1

的RLE类。

但我看到的是这个。你必须具有成员的类:

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

为什么它应该是m.Data.m_Data?对不起,我有点困惑 – user1665569 2013-02-12 03:20:00

+0

和是的,我正在尝试做m_data = memblock;而产生错误的那一行是我说的“我试图复制数据......”对不起。 – user1665569 2013-02-12 03:21:27

+1

+1我猜如果通过'delete [] memblock'立即跟踪那个指向'RLE '的指针可能会变得毫无价值。并且遵循您的Alloc建议,甚至可以使用更多主页:'RLE :: ReadStream(ifstream&inf,size_t size)'也可以派上用场。 – WhozCraig 2013-02-12 03:21:44