extern struct问题--extern和struct不能一起使用吗?该怎么使用呢?

来源:百度知道 编辑:UC知道 时间:2024/05/11 02:41:47
我想在一个.cpp文件中使用另一个.cpp文件中的struct结构,我是这样定义的:
ser.cpp中:
struct str
{
char *abc;
str(){abc="aaaa";}
}st_r;

CmfcDlg.cpp中:
extern struct str st_r;
BOOL CmfcsDlg::OnInitDialog()//一个初始化调用函数
{
AfxMessageBox(st_r.abc);
}

结果错误如下:

使用了未定义类型"str"
".abc"的左侧必须有类/结构/联合类型

如果把“extern struct str st_r;”改为“extern str st_r;”则错误如下:

语法错误 : 缺少“;”(在标识符“st_r”的前面)
“st_r” : 缺少存储类或类型说明符
“.abc”的左侧必须有类/结构/联合类型

如果把“extern struct str st_r;”改为“extern st_r;”则错误如下:
“.abc”的左侧必须有类/结构/联合类型

如果把“extern struct str st_r;”改为“extern struct st_r;”则错误如下:
使用了未定义类型“st_r”
“.abc”的左侧必须有类/结构/联合类型

而如果我把在ser.cpp中定义的结构体换成“char *abc="aaaa"”然后在CmfcDlg.cpp中:
extern char* abc;
BOOL CmfcsDlg::OnInitDialog()//一个初始化调用函数
{
AfxMessageBox(abc);
}
则编译成功。我快疯掉了,我前面错在哪?

疯掉之余,我用了绝招:
我把整个结构体Ctrl+X到“

不是这么用的……

类型的定义和类型变量的定义不同,
类型定义只是描述一个类型,
是给编译器看的,
不会产生可执行代码。
变量定义是指在执行文件中真实得存在这么一块内容。

因为每个.c里都要写清楚类型定义很麻烦,
所以一般都把类型定义写在.h里
,而在.c里采用简单的写法,如struct A a;
这样定义变量,
不需把整个类型的描述再写一遍。

--------------------------------
所以,struct类型定义放到 ser.h里面,
ser.cpp 里加struct str st_r;
CmfcDlg.cpp加上#include "ser.h"
然后直接使用extern struct str st_r;

--------------------------------
楼主要有研究精神……
你先试下我上面说的……