错误C3646“name”: 未知重写说明符 问题
在用多文件编译来写一个程序时,遇到了一个错误:
错误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的东西。
在初学C艹时就会接触到这个using namespace,但对于它的理解是很浅的,有一个前辈写了一篇关于using namespace的详解很详细,也简单易懂,我在这儿放个传送门:
http://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html
作者:Monster_ii
原文:https://blog.csdn.net/Monster_ii/article/details/79058248
版权声明:本文为博主原创文章,转载请附上博文链接!
4、关闭后重新打开VS运行
错误C3646“name”: 未知重写说明符 问题的更多相关文章
- MFC vc++严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C3646 “m_SockClient”: 未知重写说明符
严重性 代码 说明 项目 文件 行 禁止显示状态错误 C3646 “m_SockClient”: 未知重写说明符 MFC_TCP_CSocket_Client c:\users\tt2018\docu ...
- error C3646: 未知重写说明符
记录一个报错 error C3646: 未知重写说明符 ①循环引用 在项目文件变多时,由于组织不当,很容易出现头文件的循环引用 有时候虽然没有出现循环引用,但是头文件多处被include :适当的使用 ...
- 关于【error C3646: 未知重写说明符】的若干种可能性
如果在程序中出现了error C3646,那么这个错误可能是由多种问题所导致的,这篇文章将对多种错误及对应解决方法进行分析. 在MSDN的官方网站中,Complier Error C3646的定义为u ...
- C++11之重写说明符override和final
关于 本文代码演示环境: win10 + vs2017 一个困扰 之前MFC用的多了,发现一个问题: 子类窗口的某个函数是否重载了基类的函数.解决办法是: 打开基类的代码,一个个排查. 这只是一个具体 ...
- TCP网络调试助手上提示错误:“1035 未知错误”的有效解决方法,本人实测确实可行
转:https://blog.csdn.net/jacket_/article/details/97415651 图片转载:https://blog.csdn.net/Alice_YCR/articl ...
- C++ 编程错误记录
C3646 未知重写说明符 两个头文件相互引用造成的问题
- win7访问windows server 2003服务器出现未知的用户名或者错误的密码(转载)
直接放答案,感谢网友提供答案,否则自已还一直在纳闷,为什么? win7系统的安全机制限制了登陆.只要系统时间和win2003服务器的系统时间相差很多,系统就会阻止其登陆,并显示错误信息:"未 ...
- Oracle Ora 错误解决方案合集
注:本文来源于 < Oracle学习笔记 --- Oracle ORA错误解决方案 > ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发 ...
- Oracle 错误总结及问题解决 ORA
参考地址 ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常.ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数O ...
随机推荐
- 【题解】[SHOI2007]善意的投票 / [JLOI2010]冠军调查
Link \(\text{Solution:}\) 我们令源点和汇点分别为睡觉和不睡觉这两种互斥的决策点.把小朋友看成点,问题转化为最小割. 每一个小朋友对自己的意愿指向的汇点/源点.容量为\(1.\ ...
- 【暂咕咕咕】SuffixTree
#include<bits/stdc++.h> using namespace std; const int MAXN=1e6+10; typedef long long ll; char ...
- 搭建zabbix+grafana监控
编写一件安装脚本 #!/bin/sh echo "\033[32;1m脚本作者:fage\033[0m" #sleep 10 zabbix_version=4.0.2 zabbix ...
- vue获取下拉框select的值
1.我写的是循环遍历,然后获取id :value="v.id"这就是获取的id然后打印就可以获取id了
- ng2 父子组件传值 - 状态管理
一. 父子组件之间进行直接通话 //父组件html <ul> <app-li [value] = "value" (liClick) = "liClic ...
- bash 在指定目录查找包含特定关键字的文件
比如我们要在目录/usr/local/nginx/conf/vhost/下查找baidu.com这个关键字的文件 方法1: find /usr/local/nginx/conf/vhost/ -exe ...
- linux网卡驱动程序架构
以cs89x0网卡驱动为例:
- 第一个月多测师讲解__项目讲解以及注意事项(肖sir)
一.目的讲解流程:(讲述业务时长10-15分钟为宜)1.自我介绍礼貌用语,姓名,籍贯,学校,个人技能,经验,表现,兴趣爱好等 ,1分钟 ,谢谢2.介绍项目的名字 ,项目的背景,(涉及什么架构)3.对项 ...
- java 环境变量配置(win10)
到官网下载jdk,链接https://www.oracle.com/technetwork/java/javase/downloads/index.html 安装好,进行环境变量配置,打开环境变量 1 ...
- 【换根DP】小奇的仓库
题目背景 小奇采的矿实在太多了,它准备在喵星系建个矿石仓库.令它无语的是,喵星系的货运飞船引擎还停留在上元时代! 题目内容 喵星系有\(n\)个星球,星球以及星球间的航线形成一棵树. 从星球\(a\) ...