- A+
所属分类:C++
以上代码可以正常运行!
我们可能会赶到奇怪,为什么class C在header中定义了,并且在其他两个cpp中都include了,结果,链接时不会报重复定义的错误?
原因:
编译单元:一个.cc或.cpp作为一个编译单元.生成.o,简单来说一个cpp文件就是一个编译单元。
类的声明:
class A; //类的声明
类的声明和普通变量声明一样,不产生目标代码,可以在同一、以及多个编译单元重复声明。
类的定义:
class A {
……
}; //类的定义
类的定义不产生目标代码,只是告诉编译器,类的数据格式是如何的,实例化后对象该占多大空间,它和普通变量的声明唯一的区别是不能在同一编译单元内出现多次。同一编译单元内,类重复定义,会编译时报错,因为编译器不知道在该编译单元中,实例化对象的时候该调用哪一个定义的类?但是在不同编译单元内,类可以重复定义,因为类的定义未产生实际代码。因为它具有内部链接,(所谓内部链接指的是该名称对于所在编译单元是局部的,在链接时不会与其他编译单元中同样 的名称产生命名冲突),所以类定义在头文件中在链接时候不会冲突。