//为什么这样都还重复定义?该如何处理
//为什么这样都还重复定义?
//=======================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次!结论如何还是试验一下才下结论比较好。
//=======================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次!结论如何还是试验一下才下结论比较好。