真奇怪了,结构体里不能带结构体吗?

来源:百度知道 编辑:UC知道 时间:2024/06/01 21:55:07
我的一段程序:
#include "common/initsock.h"
#include <stdio.h>

CInitSock initSock;

#define MSGLOGIN 1001 // 用户登录命令
#define MSGTRANSFER 1002 // 传输数据命令
#define MSGLOGOUT 1003 // 关闭连接命令

typedef struct _SMSPACK
{
DWORD MessageType; //消息类型,0:默认文本短消息类型
SHORT FunctionNo ; //功能号,0:登录 1:传输数据 2:终止连接
typedef struct _LOGINFO
{
char userName[20];
char UserPass[20];
}Loginfo;
INT DataLength ; //业务数据报体长度
}SMSPACK, *LPSMSPACK;
int main()
{
SMSPACK mypack;
mypack.Loginfo.userName={0}; //出错
return 0;
}
如上,只要一给mypack里的结构体Loginfo成员赋值就会出错,提示
error C2274: 'function-style cast' : illegal as right side of '.' operator
error C2228: left of '.userName' must have class/struct/union type
那userName左边的Loginfo不就是一个struct吗,这不是睁眼说瞎话吗,就是不放我过,这错误提示的莫名其妙,我看别人用结构体里嵌套结构体完全正常,我这里倒底是怎么回事呢?请教高手解答

你有两个地方的代码有问题,其中最主要的是你结构定义的问题,其次是给成员变量赋值的问题,如下(见注释):
(1)
typedef struct _SMSPACK
{
DWORD MessageType;
SHORT FunctionNo ;
struct _LOGINFO // 【去掉前面的typedef】 不然Loginfo是一种在域_SMSPACK里面可见的结构类型,而不是成员变量,所以你在引用一个根本就不存在的成员时出错,相信你也在使用的时候智能提示里面没有Loginfo这个成员,呵呵
{
char userName[20];
char UserPass[20];
}Loginfo;
INT DataLength ;
}SMSPACK, *LPSMSPACK;

(2)在使用的时候赋值方法不恰当
int main()
{
SMSPACK mypack;
//mypack.Loginfo.userName={0};//出错,你要知道【userName是一个字符数组】,当然不能这么赋值,而且楼上的兄弟也说得对,你的写法是初始化方式。
mypack.Loginfo.userName[0] = '0'; //记得是字符数组,你只能一个一个地赋值(如我写给你的代码),使用起来很不方便。建议你用string类型。
return 0;
}

不明白的地方可以hi我

结构体能含结构体。

应该不可以嵌套定义吧,可以嵌套声明而已

{0}只能用来初始化,不能用来赋值。