类声明错误
class declaration error
我尝试在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*)':
你在byte BmcDataBuffer[]
之后缺少一个;
,类声明看起来也错了:我猜classFather{
应该是class Father {
。
byte BmcDataBuffer[]
将其更改为
byte *BmcDataBuffer;
哦,顺便说一下,这些行:
classFather(byte s8Command, int siLength, byte as8Data[]) { int size = sizeof( as8Data ) / sizeof( as8Data[0] );
也是错的。您无法以这种方式确定传入数组的长度。
通过编写byte BmcDataBuffer[]
,可以声明和数组。数组不是指针,因此您无法为其分配new byte[CMD_LENGTHH]
。将声明更改为byte *BmcDataBuffer
将解决编译错误。
通过这样做,您需要记住在对象被破坏时通过执行以下操作来delete
新分配的数据
~classFather() {
delete BmcDataBuffer;
}
否则,您将有内存泄漏。
正如其他人所说,您尝试分配指向数组的指针。
比这样写内存泄漏更好(我看到一个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
元素。
此外,
int size = sizeof( as8Data ) / sizeof( as8Data[0] );
不是你所期望的。传递给函数的 C 样式数组的大小始终是未知的。
您应该有一个用于size
或使用std::vector
的附加参数。
相关文章:
- 错误:未在此范围内声明'reverse'
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 错误:"imread"未在此范围内声明
- 在气泡排序程序中未声明错误功能
- 使用全局声明的向量时,C++双重释放错误/损坏
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- C++ [错误] 声明'char '隐藏参数。什么意思?
- 类中的静态函数给出了错误:声明中的两种或多个数据类型
- 错误:声明冲突 - 指针不能是 int
- 收到 CUDA 错误"声明与以前的"variable_name"不兼容
- 错误:声明不声明
- Visual Studio 2010 链接器错误C++声明我从头文件创建的类时
- Cython 错误:声明不声明任何内容
- 错误"声明非模板函数"C++
- 无效地使用不完整的类型/前向错误声明.可能误用抽象类?(c++)
- 错误:声明冲突.用c++编译c代码
- C++错误:声明中存在显式限定
- else语句(C++)上的错误w/声明
- 初始化const类成员,错误:声明没有声明任何内容