Chinaunix首页 | 论坛 | 博客
  • 博客访问: 60669
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 101
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-07 19:38
文章分类

全部博文(25)

文章存档

2014年(25)

我的朋友

分类: C/C++

2014-06-23 05:44:31

头文件中不要去定义函数 
如果现在在1.h文件中定义一个函数
#include
using namespace std;

void fun1()
{
   cout<<"fun1()"< }

在源文件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()"< }
void fun2()
{
   fun1();
}

对于3.cpp
#include
using namespace std;

void fun1()//fun1又定义了一次啦,链接肯定要出错咯~
{
   cout<<"fun1()"< }
void fun3()
{
   fun1();
}

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

上一篇:修练8年C++面向对象程序设计之体会

下一篇:没有了

给主人留下些什么吧!~~