C++为什么没有重复定义错误?

来源:互联网 发布:mac电脑发热严重 编辑:程序博客网 时间:2024/05/17 22:35

        今天在看到一个.cpp文件,这个cpp类的定义和函数的实现写在一起,我就在想这样的有什么劣势。很明显,就是在包含的时候出现重复定义。

于是又想到当他们分离的时候,为什么不会出现重复定义呢?例如:

// 1.h

class A

{

   int a;

}

// void int add(){}

//2.cpp

#include"1.h"

//3.cpp

#include"1.h"

void main()

{

}

既然2.obj和3.obj都包含有类A,但是为什么不会出现问题呢?  而如果加上函数add,为什么会出现重复定义呢?是不是思想有点奇怪了,在思考为什么不出现重复定义。

想了一会也想不通,就出去方便了一下,在出去途中,突然想到从类型上进行分析:

函数add是一个连接时期的东西;而类型A是编译时期的东西;从这个方面分析,这个问题太简单了......Mark一下:如果你在一个cpp中包含同一个头文件两次(没有#pragma once),也是会出现错误的,这是编译时期的重复定义。

原创粉丝点击