错误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 ...
随机推荐
- 【题解】一本通例题 S-Nim
\(\color{purple}{Link}\) \(\text{Solution:}\) 这个题就是给\(Nim\)游戏做了一个限制. 考虑一下\(\text{SG}\)函数:给定的局面下对应的\( ...
- 可能是东半球第二好用的软件工具全部在这里(update in 2020.10.09)
1. 产品经理工具种草 浏览器:Google Chrome 网络浏览器 原型绘制软件:墨刀- 在线产品原型设计与协作平台(https://modao.cc/).摹客mockplus - 摹客,让设计和 ...
- MySQL基础 :基本知识点大纲
- js 为什么0.1+0.2不等于0.3
当程序员在使用浮点数进行计算逻辑处理时,不注意,就可能出现问题, 记住,永远不要直接比较俩个浮点的大小 这个属于数字运算中的精度缺失的问题 在0.1 + 0.2这个式子中,0.1和0.2都是近似表示的 ...
- SpringBoot常见注解
0.前言 这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我都说了具体用法,掌握搞懂,使用 SpringBoot 来开发项目基本没 ...
- 例题3-3 回文词(Palindromes, UVa401)
输入一个字符串,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓 回文串,就是反转以后和原串相同,如abba和madam.所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE.注意, ...
- C语言编程丨循环链表实现约瑟夫环!真可谓无所不能的C!
循环链表 把链表的两头连接,使其成为了一个环状链表,通常称为循环链表. 和它名字的表意一样,只需要将表中最后一个结点的指针指向头结点,链表就能成环儿,下图所示. 需要注意的是,虽然循环链表成环 ...
- 互不侵犯(洛谷P1896)
题目:在N*N的棋盘里面放k个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入输出:输入N,K,输出有几种放置方法. ...
- linux磁盘空间满了
df-h 看到根目录已经用满了! find / -size +100M |xargs ls -lh列出系统内大于100M的文件 du --max-depth=1 -h 查看当前目录内文件夹的大小 看一 ...
- js读取xml,javascript读取XML
IE下示例代码: var xmlDoc = "<root><AlleyWay><Code>1103</Code><Name>胡同2 ...