错误 未知重写说明符 问题

在用多文件编译来写一个程序时,遇到了一个错误:

错误C3646“name”: 未知重写说明符

于是我就去某搜索引擎上搜索一下前辈们对这个错误的心得

综合网上的经验我总结了一下出现这个错误有可能的几种情况:

1、头文件之间的循环引用

比如:在a.h中包含了b.h并创建了一个b类对象,然后在b.h中又包含了a.h。

解决方法:检查工程的头文件包含关系,防止头文件的循环引用。

2、分号问题

在头文件的代码里面粗心使用了中文的分号(通常有可能是在报错代码的上一行)

解决方法:检查报错头文件中的符号

3、在使用一个类中包含了另一个类时两个类的定义顺序不对

示例代码:

class A{
B b;
}

class B{
int i;
}

在这段代码中,类A中使用了类B来定义了一个对象,但是此时类B的定义却在类A之后,这就可能产生了“未知重写说明符”的错误。
解决方法:检查类的生命顺序,被包含的类的生命顺序应该在包含它的类之前。

#include
#include

#include"student.h"

using namespace std;
程序很简单,只有两个文件,main.cpp和student.h,这是main.cpp的宏定义部分(Student.h没有宏定义,直接开始定义类)。而这样编译之后,在student.h的编译中就会报错:错误C3646“name”: 未知重写说明符(下面还有很多,都是这种,就不一一列举了)
在经过多次胡乱尝试之后,我发现如果将#inlcude"student.h"放在using namespace std;下面时,这个程序就可以正常运行了。修改之后的main.cpp宏定义部分如下:

#include
#include

using namespace std;

#include"student.h"
这样就没有“未知重写说明符”的错误了,虽然这次歪打正着,但是也说明自己了对using namespace的理解不够。
于是再查了一些关于using namespace的东西。

  • 19
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值