Eclipse环境下编译链接的有关问题

Eclipse环境下编译链接的问题
本帖最后由 ysh512 于 2014-03-18 11:10:50 编辑
有这样一个类 Server,对应Server.h和Server.cpp两个文件,
然后我写了一个main函数,关键是main函数的位置,我如果把main函数写在Server.cpp的文件中,程序没问题,正常运行。
如果单独写一个MAIN.cpp文件,把main函数写在里面,就会在link的过程中出这样的错误,multiple definition of XXXX, first defined here。
注意:所有的头文件已经加了#ifndef XXXXXX #define XXXXX #endif 防止重复包含
------解决方案--------------------
#ifndef XXXXXX #define XXXXX #endif 仅能保证同样一个头文件不会被同一个c文件包含两次,但不能保证不会被其他的c文件包含。

就是说,如果main.cpp和server.cpp都包含了这个头文件,而这个头文件确实定义了一个全局变量,那么就会分别在main.o和server.o两个文件中有一个同名的全局变量。

正确的方法是,在头文件中,总是用extern进行声明,然后在任何一个c文件中进行定义,且仅定义一次。