类声明错误 我尝试在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; };

类声明错误 我尝试在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; };,c++,class,pointers,C++,Class,Pointers,您缺少一个在字节BmcDataBuffer[]之后,类声明看起来也错了:类父{应该是类父{ 换成 byte *BmcDataBuffer; 哦,顺便说一下,这些台词: 也是错误的。您无法通过这种方式确定传入数组的长度。通过写入字节BmcDataBuffer[],您可以声明和数组。数组不是指针,因此您无法为其分配新字节[CMD_LENGTHH]。将声明更改为字节*BmcDataBuffer将解决编译错误 通过这样做,您需要记住在对象被销毁时,通过执行以下操作来删除新分配的数据 ~classFat

您缺少一个
字节BmcDataBuffer[]
之后,类声明看起来也错了:
类父{
应该是
类父{

换成

byte *BmcDataBuffer;
哦,顺便说一下,这些台词:


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

通过写入
字节BmcDataBuffer[]
,您可以声明和数组。数组不是指针,因此您无法为其分配
新字节[CMD_LENGTHH]
。将声明更改为
字节*BmcDataBuffer
将解决编译错误

通过这样做,您需要记住在对象被销毁时,通过执行以下操作来删除新分配的数据

~classFather() {
   delete BmcDataBuffer;
}
否则,将导致内存泄漏。

此外

int size = sizeof( as8Data ) / sizeof( as8Data[0] );
传递给函数的C样式数组的大小总是未知的


您应该为
size
添加一个额外的参数,或者使用
std::vector

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

这样写内存泄漏更好(我看到一个
new
,但没有
delete
),使用
向量

std::vector<byte> BmcDataBuffer;

Father(byte s8Command, int siLength, byte as8Data[]) {
    ...        
    BmcDataBuffer.insert( BmcDataBuffer.begin(), asData, asData+size );
    ...
}
将始终返回
sizeof(byte*)/sizeof(byte*)
,即1

注2:您可以使用初始值设定项列表一次性创建
向量
成员:

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

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

数组不是指针。您最好使用一个向量。您已经有内存泄漏。@utveckare-您应该从整个项目开始,然后将原始程序缩减到最小的实际完整程序,在编译时,该程序仍然可以运行导致错误。在您的情况下,这将是一个五行程序。有时我们称此过程为SSCCE(或简短的自包含完整示例)在解释过程的网站之后:。这样一个最小的程序可能看起来像这样:@utvecklare:Alf是对的;StackOverflow是一个信任的社区。不认识到这一点是新手的错误-无意冒犯。如果你的问题表明你尽了最大努力解决了自己的问题,并且诚实地说出来,这真的很有帮助g、 我最初的想法是“编译器不可能走那么远?”.但是你可能会发现,这里的人真的很愿意帮忙,但是当他们感到被冒犯时,他们并不害怕说出来。这是一件非常好的事情。另一方面,你在评论中保持了非常礼貌的回答:)别忘了三/五的规则以及所有的快乐。我坚持零的规则。@chris我不明白你在说什么你的意思是……另一方面,我是如何使用它而不是它的?@pima.developer:但是它应该是
类父
。再一次,发布真实代码。@pima.developer,简单,使用容器,传递大小,或模板,然后通过引用获取数组。@utvecklare-那要看情况了。你想做什么?它是吗需要在构造函数中新建向量并在向量中删除它吗?
vector
为您处理所有新建和删除操作。高效、安全且由世界上最好的开发人员编写。还有一个问题;)我有一个缓冲区
char myIncomingBiffer[myBufferSize]
由传入的蓝牙消息填充。我处理它,然后处理其中的一部分,即
as8Data[]
将传递给父类的构造函数以形成消息对象。我可以将侦听蓝牙消息的第一个缓冲区声明为向量吗?据我所知,不需要为向量分配大小。那么在这种情况下会发生什么,它应该定期将其内容传递给pr处理部分,因为向量的结尾没有定义?这是一个不同的问题,真的。简短回答:是的。长回答:
vector
特别设计用于处理“未知的前端”缓冲区大小。当然,它可以处理固定大小,通常被认为是您的首选容器。
vector::resize(size\t)
将分配值初始化数据,例如,
&vector[0]
向量
转换为原始
字节
指针。但请查看文档!这是开始阅读的好地方。
int size = sizeof( as8Data ) / sizeof( as8Data[0] );
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] );
Father(byte s8Command, int siLength, byte as8Data[]) 
: BmcDataBuffer( asData, asData+size )
{
}