C++重定义问题

摘自baidu
<a href=http://zhidao.baidu.com/link?url=4qWXUNCYRGjSDtybUSbJLbCHWovgcZgUqIiWMIB-LifpMdwfvGjYW8Fo3PSqW5fAyXinkA-NKs0AE3JnwsrEda target=_blank>摘自百度知道</a>
2010-02-20 14:33huopaoa | 浏览 2834 次
** 编程语言
编译环境是vs2008,项目中含一个头文件test.h,两个cpp:Main.cpp,test.cpp三个文件的内容分别如下:test.h#pragma once#ifndef FAA_H#define FAA_Hint a;#endifMain.cpp#include"test.h"int main(){return 0;}test.cpp#include"test.h"以上就是三个文件的内容,是为了测试如何用预处理器指令解决重定义问题而编写的,所以内容很简单。 如上编写会报错说变量a重定义,我不知道哪儿编写的问题。。。高手请讲下该怎么使用#define这类指令来解决这个问题,谢谢了

2010-02-20 15:46****#行家高质畅答赛火热开赛 !超级豪礼等你来~#

提问者采纳

1 有了 #pragma once 就不需要下面的#ifndef FAA_H#define FAA_H....#endif这种头文件保护符了,2者作用重复。2 变量重定义是因为你 把变量定义在了头文件里面了,每个包含test.h的.cpp里面都有一个 int a;自然链接的时候就重复了。3 解决方式:3.1 变int a;为 const int a;3.2 变 int a;为 extern int a; 并且随便在某一个(只能有一个).cpp里面写int a;4 预处理指令能解决的是一个编译单元(可以理解为一个cpp)里的问题,而你的重定义是跨了2个编译单元,预处理指令不可能解决的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 动态调用动态库方法c/c++linuxwindows 关于动态调用动态库方法说明 一、 动态库概述 1、 动态库的...
    KINGZ1993阅读 14,740评论 0 10
  • C中的预编译宏定义 2009-02-10 作者: infobillows 来源:网络 在将一个C源程序转换为可执行...
    白水灬煮一切阅读 5,547评论 0 5
  • ^函数重载的匹配: 当函数名被重载后,函数的匹配过程:首先寻找能精确匹配的函数,如果未能精确匹配,则尝试...
    鲁大帅阅读 4,683评论 0 1
  • #ifndef在头文件中的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一...
    可可西李阅读 3,332评论 0 1
  • 我是日记星球的34号星宝宝,正在参加孙老师的日记星球21天蜕变之旅的写作训练。这是我的原创第187篇,我相信日积月...
    誉仔妈妈阅读 2,454评论 6 6