請教“文件包含”問題

pagesun 2004-04-28 12:18:02
我的主程序和几個有獨立功能的類都需要包含同一個頭文件﹐然后再由我的主程序包含這几個類﹐但這樣一來出現了重復定義﹐我想把這些有不同功能的模塊單獨分開﹐請問如何解決這個問題﹖

簡化結構如下﹕

a.h
///////////////

#include "a.h" //b.h
class b
{
...
};
///////////////

#include "a.h" //c.h
class c
{
...
};
///////////////

#include "a.h" //d.h
class d
{
...
};
///////////////

#include "a.h"
#include "b.h"
#include "c.h"
#include "d.h"

void main()
{
...
}

...全文
41 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rorot 2004-04-28
  • 打赏
  • 举报
回复
用宏
//a.h
#ifndef _A_H
#define _A_H
//a.h的内容
#endif
cngdzhang 2004-04-28
  • 打赏
  • 举报
回复
同意
angelo23(angelo)

NoneSoVile 2004-04-28
  • 打赏
  • 举报
回复
头文件中这样定义变量

#ifdef LOCAL //一定要在某一个(而且只能是一个)源文件中定义的宏
#define EXTERN
#else
#define EXTERN extern
#endif

EXTERN char* buffer;
EXTERN int number;
EXTERN struct student stu;
.....
angelo23 2004-04-28
  • 打赏
  • 举报
回复
可是如果楼主写的是
char *buffer = "abcd";
之类的,就算加了extern还是定义啊。所以还是得挪到实现文件中去~
zhouqingyuan 2004-04-28
  • 打赏
  • 举报
回复
char * buffer重复定义?
当在不同的文件使用同一个变量的时候,注意要加extern。
angelo23 2004-04-28
  • 打赏
  • 举报
回复
To junnyfeng
意思就是对于b.h,把_A_H换成_B_H。。。
一般头文件都应该加上这种防御性措施的
angelo23 2004-04-28
  • 打赏
  • 举报
回复
那估计是你在头文件当中不但有声明,还有定义。把定义放在.cpp文件中吧。一般除了常量和inline函数还有template才把定义放在头文件当中。其它的可能重复定义的
junnyfeng 2004-04-28
  • 打赏
  • 举报
回复
不明白angelo23的做法
“其他头文件也如法炮制”,难道每个头文件都要加a.h的内容吗
pagesun 2004-04-28
  • 打赏
  • 举报
回复
我也試過這種方式﹐但這樣出現了許多類似于
background.obj : error LNK2005: "char * buffer" (?buffer@@3PADA) already defined in main.obj
這樣的錯誤﹐不知道何解﹖
RookieStar 2004-04-28
  • 打赏
  • 举报
回复
单元测试的时候,在各头文件内把a.h加上
集成测试的时候,把各头文件a.h去掉,只在main所在的源文件包含a.h
angelo23 2004-04-28
  • 打赏
  • 举报
回复
//a.h
#ifndef _A_H
#define _A_H
//a.h的内容
#endif

其他头文件也如法炮制

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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