读书人

烦请大家看看这两个结构体/类该怎么初

发布时间: 2012-09-29 10:30:01 作者: rapoo

烦请大家看看这两个结构体/类该如何初始化
1:
//TLV结构
struct TLVEntity {
unsigned char* Tag;//标记
unsigned char* Length;//数据长度
unsigned char* Value;//数据
unsigned int TagSize;//标记占用字节数
unsigned int LengthSize;//数据长度占用字节数
TLVEntity* Sub_TLVEntity;//子嵌套TLV实体
};


2:
//打包解析buffer(TLV结构)
class TLVPackage
{
public:
//TLVPackage();
//virtual ~TLVPackage();
static void Construct(unsigned char* buffer, int bufferLength, TLVEntity* tlvEntity, int& entityLength);

};

使用时这样:
TLVPackage A;
A.Construct(buffer, bufferLength, tlvEntity, entityLength)

烦请大家看看这两个结构体/类该如何初始化,VS2005环境下.....谢谢!

[解决办法]
不太清楚你要问什么

为什么把第二个的构造函数注释掉了?
[解决办法]
第一个,如果你用的是C语言,就写一个专门的函数进行初始化就可以了,分配内存用malloc。
如果是用C++,这两个都可以写到构造函数里。
不知道你说的编译出错是什么情况,贴完整代码或出错信息
[解决办法]
第二个类中并没有保存TLVEntity的指针,其实也没有必要保存这个指针。现在的TLVPackage其实与一个单独的函数Construct没有区别。这个函数应该有个调用的约定,即传入参数的正确性。如果传入参数不满足完成操作的必要条件,就返回错误值即可。
在这里,首先保证TLVEntity指针指向一个TLVEntity对象。其次,保证buffer指向一段合适大小的内存。
本着谁创建,谁释放的原则,函数不应该主动分配堆上的内存。
至于TLVEntity的初始化,可以在自己的构造函数中,也可以用单独的函数初始化。
[解决办法]

C/C++ code
TLVEntity entity = {NULL, NULL, NULL, 0, 0, NULL};TLVPackage::Construct(buffer, bufferLength, &entity, entityLength);
[解决办法]
探讨
引用:

第二个类中并没有保存TLVEntity的指针,其实也没有必要保存这个指针。现在的TLVPackage其实与一个单独的函数Construct没有区别。这个函数应该有个调用的约定,即传入参数的正确性。如果传入参数不满足完成操作的必要条件,就返回错误值即可。
在这里,首先保证TLVEntity指针指向一个TLVEntity对象。其次,保证buffer指向一段合适大小的内存……

读书人网 >C++

热点推荐