最近在学习使用C++写ftp文件服务器,里面有结构体中需要嵌套结构体。源代码中是用C语言实现的结构体嵌套共用体(联合体),代码如下
enum MSGTAG {
MSG_FILENAME = 1, //文件名
MSG_FILESIZE = 2, //文件大小
MSG_READY_READ = 3, //准备接受
MSG_SENDFILE = 4, //发送
MSG_SUCCESSED = 5, //发送成功
MSG_OPENFILE_FAILD = 6 //告诉客户端文件找不到
};
struct MsgHeader { //封装消息头
enum MSGTAG msgID; //当前消息标记 4byte
union MyUnion{
struct {
char fileName[512]; //文件名 512
int fileSize; //文件大小 4
}fileInfo; //520
struct {
int nsize; //该包的数据大小
char buf[1016];
}packet;
};
};
源代码中实际调用的结构体初始化如下
struct MsgHeader msg = {
.msgID = MSG_FILENAME,
.fileInfo.fileName = "ok,fine",
.fileInfo.fileSize = 7
};
我发现在C++实际函数的调用中使用 .msgID或.fileInfo.fileName 并不能访问到结构体中的成员变量,需将源代码中结构体中共用体(联合体)的嵌套改为
struct MsgHeader { /