您的位置:首页 > 其它

头文件中不要去定义函数与变量

2014-04-04 16:02 465 查看
定义函数

如果现在在1.h文件中定义一个函数

#include

using namespace std;

void fun1()

{

cout<<"fun1()"<<endl;

}

在源文件2.cpp中这样使用

#include "1.h"

//extern void fun1(); //有没有此申明都不报错

void fun2()

{

fun1();

}

在源文件3.cpp中这样使用,就会报错了,此时讲提示有重复定义fun1。

#include "1.h"

void fun3()

{

fun1();

}

原因:

编译器在编译时候的一个编译单元是*.o,在所生成的N个*.o文件中,任何变量或者函数只能有一个定义,否则在链接时候,链接器不知道要使用哪个*.o文件中的定义。所以链接器讲产生重复定义的链接错误。

对于#include, 它讲把所包含的头文件内容全部放到源文件里面,所以对于上面2.cpp和3.cpp,编译时候将会类似于:

#include

using namespace std;

void fun1()

{

cout<<"fun1()"<<endl;

}

void fun2()

{

fun1();

}

对于3.cpp

#include

using namespace std;

void fun1()//fun1又定义了一次啦,链接肯定要出错咯~

{

cout<<"fun1()"<<endl;

}

void fun3()

{

fun1();

}

因而在平常时候,我们不要讲函数定义在头文件中。只在头文件中进行声明,在源文件中实现。这样对于大型工程,有助于代码文件的有效管理。

定义变量

在1.h里定义int g_x = 0;如果只在一个cpp文件中调用include“1.h”,可以编译通过,如果在多个文件中调用include“1.h”,就会编译失败,提示重定义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: