解决类重定义错误

有时候我们在编译程序时会遇到‘class’ type redifintion这样的报错。这有可能就是我们碰到了头文件重复包含的问题了。

比如我们编写这样几个类:


//animal.h

class animal

{

//.....

}


//fish.h

#include "animal.h"  //因为fish是从animal派生而来的,因此要包含animal.h这个头文件

class fish:public animal

{

//.......

}


//test.cpp  测试问题


#include "animal.h"

#include "fish.h"

void main()

{.....}


当我们编译这个test.cpp文件的时候,就会报重定义错误。原因是这个文件包含了animal.h与fish.h两个头文件。当编译器编译test.cpp文件时,首先会遇到animal.h这个头文件,于是编译器就会将这个头文件展开,就可以识别animal这个类了;将animal.h这个头文件展开后,编译器就会遇到fish.h这个头文件,编译器同样会将这个文件展开,但是不同的是,这个fish.h头文件里面也包含了animal.h这个头文件,于是编译器就会再次展开这个animal.h头文件。。。这样问题就出现了,两次展开同一个头文件animal.h,这样就相当于animal这个类定义两次的情况,自然就会报错了。

解决这个问题的方法就是采用预处理指令,具体如下:

//animal.h

#ifndef ANIMAL_H_H

#define ANIMAL_H_H

class animal

{//....}  

#endif


//fish.h

#include "animal.h"

#ifndef FISH_H_H

#define FISH_H_H

calss fish:public animal

{//.....}

#endif

这样以后再重新编译test.cpp文件看看,应该就不会出现重复包含头文件导致的错误了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值