0

我尝试在 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*)':
4

5 回答 5

2

您缺少;afterbyte BmcDataBuffer[]并且类声明看起来也错误:我猜classFather{应该是。class Father {

于 2012-10-24T14:08:31.623 回答
2
byte BmcDataBuffer[]

将其更改为

byte *BmcDataBuffer;

哦,顺便说一句,这些行:

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

也错了。您无法以这种方式确定传入数组的长度。

于 2012-10-24T14:08:38.577 回答
2

通过写作byte BmcDataBuffer[],你声明和数组。数组不是指针,因此您不能分配new byte[CMD_LENGTHH]给它。将您的声明更改为byte *BmcDataBuffer将解决您的编译错误。

delete通过这样做,当对象被破坏时,您需要记住新分配的数据,方法是执行类似的操作

~classFather() {
   delete BmcDataBuffer;
}

否则,您将有内存泄漏。

于 2012-10-24T14:08:41.563 回答
1

此外,

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

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

您应该有一个额外的参数用于size或使用std::vector.

于 2012-10-24T14:12:05.277 回答
1

正如其他人所说,您尝试将指针分配给数组。

最好以这种方式编写内存泄漏(我看到 anew但没有delete),使用 a 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元素。

于 2012-10-24T14:12:44.060 回答