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

错误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”: 未知重写说明符 问题的更多相关文章

  1. MFC vc++严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C3646 “m_SockClient”: 未知重写说明符

    严重性 代码 说明 项目 文件 行 禁止显示状态错误 C3646 “m_SockClient”: 未知重写说明符 MFC_TCP_CSocket_Client c:\users\tt2018\docu ...

  2. error C3646: 未知重写说明符

    记录一个报错 error C3646: 未知重写说明符 ①循环引用 在项目文件变多时,由于组织不当,很容易出现头文件的循环引用 有时候虽然没有出现循环引用,但是头文件多处被include :适当的使用 ...

  3. 关于【error C3646: 未知重写说明符】的若干种可能性

    如果在程序中出现了error C3646,那么这个错误可能是由多种问题所导致的,这篇文章将对多种错误及对应解决方法进行分析. 在MSDN的官方网站中,Complier Error C3646的定义为u ...

  4. C++11之重写说明符override和final

    关于 本文代码演示环境: win10 + vs2017 一个困扰 之前MFC用的多了,发现一个问题: 子类窗口的某个函数是否重载了基类的函数.解决办法是: 打开基类的代码,一个个排查. 这只是一个具体 ...

  5. TCP网络调试助手上提示错误:“1035 未知错误”的有效解决方法,本人实测确实可行

    转:https://blog.csdn.net/jacket_/article/details/97415651 图片转载:https://blog.csdn.net/Alice_YCR/articl ...

  6. C++ 编程错误记录

    C3646 未知重写说明符 两个头文件相互引用造成的问题

  7. win7访问windows server 2003服务器出现未知的用户名或者错误的密码(转载)

    直接放答案,感谢网友提供答案,否则自已还一直在纳闷,为什么? win7系统的安全机制限制了登陆.只要系统时间和win2003服务器的系统时间相差很多,系统就会阻止其登陆,并显示错误信息:"未 ...

  8. Oracle Ora 错误解决方案合集

    注:本文来源于 < Oracle学习笔记 --- Oracle ORA错误解决方案 > ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发 ...

  9. Oracle 错误总结及问题解决 ORA

    参考地址 ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常.ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数O ...

随机推荐

  1. SHOI 2013 【扇形面积并】

    早上考的,我打了80分的部分分,出来和同学讨论的时候真想扇自己一巴掌...... 题目描述: 给定 n 个同心的扇形,求有多少面积,被至少k 个扇形所覆盖. 输入输出格式 输入格式: 第一行是三个整数 ...

  2. 微信小程序中使用 npm包管理 (保姆式教程)

    打开自己的微信小程序项目,在勾选这个选项 然后在第一次应该是失败的提示"没有找到可以构建的npm包". 在 小程序的根目录下比如我的项目如图: 右击鼠标在终端中打开. 然后输入:n ...

  3. js 为什么0.1+0.2不等于0.3

    当程序员在使用浮点数进行计算逻辑处理时,不注意,就可能出现问题, 记住,永远不要直接比较俩个浮点的大小 这个属于数字运算中的精度缺失的问题 在0.1 + 0.2这个式子中,0.1和0.2都是近似表示的 ...

  4. nrf528xx bootloader 模块介绍

    1. bootloader 的基本功能: 启动应用 几个应用之间切换 初始化外设 nordic nrf52xxx的bootloader主要功能用来做DFU, 可以通过HCI, UART 或BLE通信的 ...

  5. Markdown语法及使用方法完整手册

    欢迎使用 Markdown在线编辑器 MdEditor Markdown是一种轻量级的「标记语言」 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容 ...

  6. ASP.NET Core 3.1 Razor 视图预编译、动态编译

    1.安装NuGet包 Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 2.Startup.cs 配置 public ...

  7. centos8上安装openresty

    一,openresty的官网地址: http://openresty.org/ 说明:说一下openresty的安装方式: 从openresty的安装目录下,可以看到openresty编译安装了自己作 ...

  8. History和Screen的对象属性

    History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问. 属性 说明 length 返回历史列表中的网址数 History 对象方法 方法 说明 b ...

  9. Linux系统及第三方应用官方文档

    通过在线文档获取帮助 http://www.github.com https://www.kernel.org/doc/html/latest/ http://httpd.apache.org htt ...

  10. poj1654 -- Area (任意多边形面积)

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20444   Accepted: 5567 Description ...