一个c语法问题??

qsyang 2002-04-23 04:44:22
求救:
用bc3.1生成一个项目,主程序_main.cpp中调用两个头文件1.h, 2.h,现在在1.h中声明了一个结构,并定义了一个变量,那么在2.h中如果想使用1.h的结构变量,该怎样声明呢?我用extern声明不行。怎么办?
...全文
37 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsyang 2002-04-24
  • 打赏
  • 举报
回复
问题解决,结贴
tmdee 2002-04-23
  • 打赏
  • 举报
回复
用预编译:
#ifndef 1_h
#include "1.h"
.
.
.

#endif


晨星 2002-04-23
  • 打赏
  • 举报
回复
“楼上的:
我们的项目由好几个人来写,所以很难做到你那样!”

你们做的是个项目?我还以为这是老师出的考试题故意来考你们预编译的知识呢!

结构定义当然可以在.h文件中,但既然不是考试题,为什么要把不只一个文件使用的变量定义在.h文件中呢?挪到.cpp文件中吧,一切将迎刃而解。
qsyang 2002-04-23
  • 打赏
  • 举报
回复
to zhukejun(Harvey) :
请从纯语言的角度来解决问题!
qsyang 2002-04-23
  • 打赏
  • 举报
回复
to zhukejun(Harvey) :
请从纯语言的角度来解决问题!
qsyang 2002-04-23
  • 打赏
  • 举报
回复
to ashchan(纯虚人生) :
我按你所说的试了下,问题依旧。我在1.h中还用AA声明了一些变量,还有一些结构中嵌套使用AA。但是在2.h中只用了一个AA的变量。这个变量在1.h中的很多函数中都用到。
编译总是提示重复定义!

附:如果不用结构,只用一般类型,那么一切ok
zhukejun 2002-04-23
  • 打赏
  • 举报
回复
你们的项目管理肯定有问题!
qsyang 2002-04-23
  • 打赏
  • 举报
回复
楼上的:
我们的项目由好几个人来写,所以很难做到你那样!
ashchan 2002-04-23
  • 打赏
  • 举报
回复
下面的应该行。

// :a1.h

#ifndef A1_H
#define A1_H

typedef struct A {
int a;
char b;
} AA;
AA test1;
int test2;
#endif

***************************************
// :a2.h

#ifndef A2_H
#define A2_H
#include "a1.h"

extern AA test1; //这次OK了吗
extern int test2; //正确

#endif

*********************************
/* :test.cpp
*
* James Chan 2002/04/23
* ashchan_xp@hotmailcom
* www.ashchan.com
*/

#include <iostream>

#include "a1.h"
#include "a2.h"

int main()
{

return 0;
}
sum_1 2002-04-23
  • 打赏
  • 举报
回复
我到有一个建议把你所有过程所用到的结构,变量等的声明写在一个包含文件中.包含此文件的语句放在代码的最前端,这样下面代码就可以共享了.
知道你的代码非常复杂,好好整理一下.
qsyang 2002-04-23
  • 打赏
  • 举报
回复
to snipersu() :
假设我的1.h如下:
-------------------------
typedef struct A
{
int a;
char b;
}AA;
AA test1;
int test2;

typedef struct B
{
AA t1;
int b;
}BB;
//还有很多结构中用到了AA
---------------------------------
现在我想在2.h中调用用AA定义的test1,用你所说的预编译怎么实现呢?好像不是那么简单吧???

qsyang 2002-04-23
  • 打赏
  • 举报
回复
to HKer_007(刚强) :
如果再定义一个3.h文件,那么结构声明肯定要放在那里,现在我在1.h中除了用了那个结构定义了一个变量以外,在其他结构中还嵌套了此结构,所以你的方法不可行!
HKer_007 2002-04-23
  • 打赏
  • 举报
回复
干脆再定义一个3.h文件,将这个变量放进去,当成全局变量;
加上: #include"3.h"
snipersu 2002-04-23
  • 打赏
  • 举报
回复
在1.h中定义一个变量也好符号也好如#define _1H
在2.h中用ifndef _1H ....else...#endif 来避免重复定义。
qsyang 2002-04-23
  • 打赏
  • 举报
回复
TO shipatrioc(风吹雨打哗啦啦)
我现在的程序比较复杂,在1.h 和2.h中有些互相需要引用的变量,所以还不能向你那样做。
gawain 2002-04-23
  • 打赏
  • 举报
回复
在file2.h中要再次声明一AA的结构
比较好的办法是在.c文件中声明那两个变量
然后在.h文件中有extern来引用
shipatrioc 2002-04-23
  • 打赏
  • 举报
回复
2.h中调用1.h
然后extern该变量,
main函数里只include的2.h就行了
qsyang 2002-04-23
  • 打赏
  • 举报
回复
楼上的:
我已经在主文件中#include 1.h 和 #include 2.h了,但是不行。部分代码如下:
file 1.h:
------------------------
typedef struct A
{
int a;
char b;
}AA;
AA test1;
int test2;
------------------------

file 2.h
-------------------------
extern AA test1; //错误
extern int test2; //正确

怎么回事??
sum_1 2002-04-23
  • 打赏
  • 举报
回复
在主文件中
先#include "1.h"
然后再#include "2.h"就行了嘛.
如果有重复定义那就看看2.h中是否间接调用了,有可能你没发现.
extern中是怎样声明的结构的请列出代码.
qsyang 2002-04-23
  • 打赏
  • 举报
回复
楼上的:
用#include后会出现变量重复定义的错误。
我用extern声明1.h中的变量都可以,就是结构不可以。怎么回事?
加载更多回复(1)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧