一般在调试代码出现“error C3646: 未知重写说明符”大致有三种原因引起的错误:
1、循环引用
在模块化编程中对各个对象抽象化,并为各个对象编写独立的文件文件,那么在编程过程中各个对象可能出现相互引用的情况
这时候就特别容易出现“error C3646: 未知重写说明符”的情况。举个例子比如有三个文件分别A.h A.cpp,B.h B.cpp,C.h C.cpp,
A.h头文件包含#include "B.h",B.h头文件包含#include "C.h",C.h头文件包含#include "A.h"相互嵌套,并且相互定义如下所示:
那么这种情况在编译时就会出现“error C3646: 未知重写说明符”等问题并且还会附加其他很多的错误如下图所示:
解决方法:A.h,B.h,C.h头文件不互相包含,A.h头文件去除掉#include "B.h"改为在class A前面加一个class B;声明类B,B.h头文件去除掉#include "C.h"改为在class B前面加一个class C;声明类C,C.h头文件去除掉#include "A.h"改为在class C前面加一个class A;声明类A,如下图所示;
这样子即可解决“error C3646: 未知重写说明符”等问题
2、语法错误
某个成员函数中把分号;写成了中文分号;,将会出现此类错误。
解决方案:修改分号
3、类的顺序错误
如果一个类的成员中包含另一个类,则被包含的类的生命一定要在包含的类之前。