刚开始学STL,想在一个链表或向量中保存等长的二进制数,于是写了以下的语句:
char d3[6];
vector<char [6]> myvector;
vector<char [6]>::iterator p;
sprintf(d3, "%s", "uvxyz");
myvector.push_back(d3);
编译的时候告诉我:x:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(810): error C2440: “初始化” : 无法从“const char [6]”转换为“char [6]”请问是怎么回事?

解决方案 »

  1.   

    struct CHAR6
    {
        char a[6];
    }你这么来就可以了。
      

  2.   

    vector<char [6]> 不能这样用,用指针吧vector<char*>
      

  3.   

    void push_back(const _Ty& _Val)?stl将const char[6]和char[6]看作不同的数据类型,你应该将char[6]封装成一个数据类型,并为此数据类型提供operator=和copy constructor
    template<int nBufferSize>
    class CFixedBuffer
    {
    public:
    CFiexedBuffer()
    {
    ZeroMemory(m_Buffer,sizeof(m_Buffer));
    }
    CFixedBuffer(const CFixedBuffer& rhs){
    operator=(rhs);
    }
    const CFixedBuffer& operator=(const CFixedBuffer& rhs)
    {
    CopyMemory((char*)m_Buffer,(char*)rhs.m_Buffer,sizeof(m_Buffer));
    return *this;
    }
    operator char* (){return reinterpret_cast<char*>(m_Buffer);}
    private:
    char m_Buffer[nBufferSize];
    };vector<CFixedBuffer<6> > vtFixedBuffer;
    CFixedBuffer<6> aFixedBuffer;
    sprintf(aFixedBuffer,"%s","test");
    vtFixedBuffer.push_back(aFixedBuffer);
      

  4.   

    stl将const char[6]和char[6]看作不同的数据类型,你没有提供从char[6]到const char[6]的转换方式。
      

  5.   

    如果用vector<char*>的话,在子函数中push_back(引用调用)添加数据,不是得malloc?
      

  6.   

    vector<char*>满足不了“向量中保存等长的二进制数”的要求,并需要自己管理缓冲区。
      

  7.   

    如果真要弄的像牙医说的那样,就太麻烦了,还不如用不vector<char*>,然后每次添加数据的时候申请内存.
    唉,这个东西好象不如传说中的好用呀.