C++重定义问题

摘自baidu
摘自百度知道
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++重定义问题)