//为什么这样都还重复定义?该如何处理

//为什么这样都还重复定义?
//=======================main.cpp

#include   <iostream>
using   namespace   std;

#include   "Global.h "

int   main()
{
cout < < "Test ";
}

//=====================Global.h

#ifndef   GLOBAL_DEFINE
#define   GLOBAL_DEFINE

bool   a=false;                               //为什么这样都还重复定义?
bool   b=false;

#endif

//=======================Test.cpp

#include   <iostream>
using   namespace   std;

#include   "Global.h "

------解决方案--------------------
因为c++就这么规定的。
不可以在.h里定义变量,因为就是会触发这个重复定义错误。
你只能在.h里用extern bool a;这样声明变量。
------解决方案--------------------

这样做

//=====================Global.h

#ifndef GLOBAL_DEFINE
#define GLOBAL_DEFINE

extern bool a;
extern bool b;

#endif


//=====================Global.cpp

bool a = false;
bool b = false;

------解决方案--------------------
因为你在main.cpp 和 Test.cpp 里都 #include "Global.h "

了,所以定义了两次
------解决方案--------------------
#ifndef GLOBAL_DEFINE
#define GLOBAL_DEFINE

#endif

不 要理解错了,上面是防止头文件被重复包含的, 防止重复定义还要靠自己
------解决方案--------------------
#ifndef GLOBAL_DEFINE
#define GLOBAL_DEFINE

#endif

对呀,既然 防止头文件被重复包含 ,那么只包含一次的话不就不会重复定义了

----------


因为你在main.cpp 和 Test.cpp 里都 #include "Global.h "

了,所以定义了两次

------解决方案--------------------
按着你的意思我看可以用
//=====================Global.h

#ifndef GLOBAL_DEFINE
#define GLOBAL_DEFINE

static bool a=false; //为什么这样都还重复定义?
static bool b=false;

#endif

------解决方案--------------------
按着你的意思我看可以用
//=====================Global.h

#ifndef GLOBAL_DEFINE
#define GLOBAL_DEFINE

static bool a=false; //为什么这样都还重复定义?
static bool b=false;

#endif


-------


不行!!只能按去前面说的做,看来你不太理解 #include

#include 是把后面的文件展开 就是static了,展开后还是两份
------解决方案--------------------
static 后编译应该是可以过的,但已经不是你要的东西了

它为每个include它的文件生成一份数据
------解决方案--------------------
编译是对每个.cpp文件做的操作

你这个重复定义可以通过编译, 但是在将多个.cpp编译出来的.obj文件链接成一个exe文件时
就会有同一个变量在几个obj中都有定义, 这样就出错了, 链接器不知道到底该链接哪个定义的变量
------解决方案--------------------
按着你的意思我看可以用
//=====================Global.h

#ifndef GLOBAL_DEFINE
#define GLOBAL_DEFINE

static bool a=false; //为什么这样都还重复定义?
static bool b=false;

#endif


-------


不行!!只能按去前面说的做,看来你不太理解 #include

#include 是把后面的文件展开 就是static了,展开后还是两份


-------------

理论固然重要,但要明白用户要求!虽然我不太清楚,只能猜测楼主想在一开始就给a、b付值,而且“#include 是把后面的文件展开 就是static了,展开后还是两份”,应该实践一下,对理论理解可能会有偏差。而且依据楼主定义不可能在同一文件中定义被包含2次!结论如何还是试验一下才下结论比较好。