本人有遇到一个问题,把问题单独抽离出来,代码如下,其中,给派生类增加volatile关键字后,出错:
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include "testPLUS.h" int _tmain(int argc, _TCHAR* argv[]) { volatile testPLUS * x; // 本人需要一个 volatile 变量,可是声明为volatile后就报错了,不声明为volatile就没问题。 x = new testPLUS(); x->testBASE_a(); // 编译提示该行出错。 return 0; }
//testBASE.h : 基类testBASE的 声明。 #pragma once class testBASE { public: testBASE(); virtual ~testBASE(); void testBASE_a(); };
//testBASE.h : 基类testBASE的 定义。 #include "stdafx.h" #include "testBASE.h" testBASE::testBASE() {} testBASE::~testBASE() {} void testBASE::testBASE_a() { return; }
//testPLUS.h : 派生类testPLUS的 声明。 #pragma once #include "testBASE.h" class testPLUS : public testBASE { public: testPLUS(); ~testPLUS(); };
//testPLUS.h : 派生类testPLUS的 定义。 #include "stdafx.h" #include "testPLUS.h" testPLUS::testPLUS() {} testPLUS::~testPLUS() {}
编译的输出内容如下: 1>-- 已启动全部重新生成: 项目: ConsoleApplication1, 配置: Debug Win32 -- 1> stdafx.cpp 1> testPLUS.cpp 1> testBASE.cpp 1> ConsoleApplication1.cpp 1>c:\users\zzs\desktop\consoleapplication1\consoleapplication1\consoleapplication1.cpp(10): error C2662: “void testBASE::testBASE_a(void)”: 不能将“this”指针从“volatile testPLUS”转换为“testBASE &” 1> 转换丢失限定符 1> 正在生成代码... ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
解决方案:40分
volatile是针对数据的,例如变量,但是类中有方法,所以对类的使用可能报错