C++头文件重复引用问题:编译器报错:C2011: “Coordinate”:“class”类型重定义*

这是由于头文件重定义造成的。

我当时的文件是这样的,然后就报了错

a.h

包含a class 的内容

a.cpp

#include "a.h"

b.h

#include "a.h"

b.cpp

#include "b.h""

main 函数

#include "a.h"
#include "b.h""

主要原因

C++语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行了。
比如,在文件a.cpp中定义了一个全局函数“voida(){}”,而在文件b.cpp中需要调用这个函数。即使这样,文件a.cpp和文件b.cpp并不需要相互知道对方的存在,而是可以分别地对它们进行编译, 编译成目标文件之后再链接,整个程序就可以运行了。

因此编译器读取我的main函数时是这样的:
首先对宏定义 #include “a.h” 编译,然后对 #include “b.h” 编译,然而我的 b.h 中又
定义了 “a.h”。所以编译器又会对 “a.h” 编译。这样就会造成二次编译。

解决方案

  • 当文件数太多,你不确定是否定义过了 a.h,那么可以用下面的方法解决。如果知道在哪里重复定义了,直接去掉宏定义即可
#ifndef _A_H_
#define _A_H_

......//头文件内容

#endif

比如我的是 "coordinate.h",我不确定有没有定义过这个文件。那么在main函数中,将其替换成下面代码即可

#ifndef _COORDINATE_H_
#define _COORDINATE_H_

#include "Line.h"
#endif 

参考文献:

  • https://www.cnblogs.com/Dyleaf/p/7898167.html
  • https://www.so.com/link?m=bj468gaNHWVXG%2BCCmc1hEPcdO6WXxXmPIUOat614pX8KQ0wVxw7X9xKaiy93C4eTj4MtCwzqdQAlSCP1JvkGkQPinquS%2BQC3sY3TWhe0I1n1YHuBW3ST8RMil1fC%2FbTJf29pinJXQhctVE3Fx%2FP%2FyTV0%2FKHBeIbHgzvTvbSAuXNfiiVTAbY%2F9pBFkb93LJ4X2yvr%2F5JGUrxi2B2Lt%2BHu06z420cu3nBS4mQ35UoItXR9ssqMNf%2F0eiAVJBqJvA3E5UOK558lihzIyzJUm1wjScHIX4KE%3D
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值