类声明错误

时间:2012-10-24 14:06:28

标签: c++ class pointers

我尝试在C ++中声明以下类;但是,我收到了以下错误。指针有问题吗?

class classFather{
public:
    int BmcCommand;
    int BmcDataLength;
    byte BmcDataBuffer[];

    classFather() {
        BmcCommand = 0;
        BmcDataLength = 0;
        BmcDataBuffer = new byte[CMD_LENGTHH];
    }

    classFather(byte s8Command, int siLength, byte as8Data[]) {
        BmcCommand = s8Command;
        BmcDataLength = siLength;
        int size = sizeof( as8Data ) / sizeof( as8Data[0] );
        BmcDataBuffer = new byte[size];
        for(int ii=0; ii< size; ii++)
            BmcDataBuffer[ii] = as8Data[ii];
    }
private:
    static const short CMD_LENGTHH = 255;
};

我收到以下错误:

error: incompatible types in assignment of `byte*' to `byte[0u]'
C:\....\BluetoothClient\/msgCAN.h: In constructor `msgCANFather::msgCANFather(byte, int, byte*)':

5 个答案:

答案 0 :(得分:2)

;之后你错过了byte BmcDataBuffer[],而且类声明看起来也错了:我猜classFather{应为class Father {

答案 1 :(得分:2)

  
byte BmcDataBuffer[]
  

将其更改为

byte *BmcDataBuffer;

哦,顺便说一下,这些界限:

  
classFather(byte s8Command, int siLength, byte as8Data[]) {
     int size = sizeof( as8Data ) / sizeof( as8Data[0] );
  

也错了。你无法通过这种方式确定传入数组的长度。

答案 2 :(得分:2)

通过编写byte BmcDataBuffer[],声明和数组。数组不是指针,因此您无法为其指定new byte[CMD_LENGTHH]。将您的声明更改为byte *BmcDataBuffer将解决您的编译错误。

通过这样做,你需要记住delete当对象被破坏时你新分配的数据是做

之类的事情
~classFather() {
   delete BmcDataBuffer;
}

否则,你会发生内存泄漏。

答案 3 :(得分:1)

此外,

int size = sizeof( as8Data ) / sizeof( as8Data[0] );

不是你所期望的。传递给函数的C样式数组的大小始终是未知的。

您应该为size添加其他参数或使用std::vector

答案 4 :(得分:1)

正如其他人所说,你试图指定一个指向数组的指针。

最好以这种方式写内存泄漏(我看到new但没有delete),使用vector

std::vector<byte> BmcDataBuffer;

Father(byte s8Command, int siLength, byte as8Data[]) {
    ...        
    BmcDataBuffer.insert( BmcDataBuffer.begin(), asData, asData+size );
    ...
}

注意:

int size = sizeof( as8Data ) / sizeof( as8Data[0] );

将始终返回sizeof( byte* ) / sizeof( byte* ),即1。

注2:您可以使用初始化列表一次创建vector成员:

Father(byte s8Command, int siLength, byte as8Data[]) 
: BmcDataBuffer( asData, asData+size )
{
}

vector构造函数将复制所有asData元素。