虚函数的声明和定义与编译器错误提示
2014-04-04 10:23
323 查看
Sprite.h
再看下面的void Test()函数,同样是只声明,未定义,编译的时候却不报错(当然我们没有调用Test()),这是为什么呢?
在 类 声明中,用virtual修饰的方法,无论是否调用,都需要给出相应的定义。
#pragma once class Sprite { public: Sprite(void); virtual ~Sprite(void); };在Sprite.h中,我们对~Sprite进行了声明,但是我们却没有给它时行定义
#include "Sprite.h" Sprite::Sprite(void) { } //Sprite::~Sprite(void) //{ //}编译器出现LNK2001错误
1>main.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall Sprite::~Sprite(void)" (??1Sprite@@UAE@XZ),该符号在函数 _main 中被引用 1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(611,5): error MSB6006: “link.exe”已退出,代码为 1120。 1>Sprite.obj : error LNK2001: 无法解析的外部符号 "public: virtual __thiscall Sprite::~Sprite(void)" (??1Sprite@@UAE@XZ) 1>Weapon.obj : error LNK2001: 无法解析的外部符号 "public: virtual __thiscall Sprite::~Sprite(void)" (??1Sprite@@UAE@XZ) 1>D:\WorkSpace\AccerCpp\ch1\Debug\Ref_handle.exe : fatal error LNK1120: 1 个无法解析的外部命令 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
再看下面的void Test()函数,同样是只声明,未定义,编译的时候却不报错(当然我们没有调用Test()),这是为什么呢?
#pragma once class Sprite { public: Sprite(void); virtual ~Sprite(void); void Test(); }; Sprite.cpp #include "Sprite.h" Sprite::Sprite(void) { } Sprite::~Sprite(void) { }答案是,关键字virtual。
在 类 声明中,用virtual修饰的方法,无论是否调用,都需要给出相应的定义。
相关文章推荐
- error C2533: “WSProtocol::{ctor}”: 构造函数不能有返回类型 error C2264: “WSProtocol::WSProtocol”: 函数定义或声明中有错误
- vs2010编译时出现错误提示:error C2470: “xx”: 看起来像函数定义,但没有参数列表;跳过明显的函数体
- C++模版函数声明和定义分离导致的错误
- 在文件中定义了一个函数, 但调用的时候编译器提示找不到, 呵呵哒!
- 解决方案:静态成员对象的声明在头文件中,函数代码在另外一个文件中,提示链接错误
- c++ 在类体外定义的成员函数,函数体的左括号提示:error 应输入声明
- 构造函数不能有返回类型 ,函数定义或声明中有错误;未调用函数
- error C2264函数定义或声明中有错误;未调用函数
- (C++)错误提示 c2352 :非静态成员函数的非法调用
- 函数的声明和定义的区别; 结构体的说明和定义的区别
- emacs erlang ,debug,高亮,函数跳转,重构,错误提示,自动补全。一个都不少
- 函数的声明,定义
- 定义一个函数求字符串的长度,要求该函数体内不能声明任何变量
- 变量、函数声明与定义
- 编译器错误C2011类型重定义小记
- 函数分类、函数声明和定义、函数调用,形参实参、函数嵌套调用
- Delphi执行SQL提示“不正常地定义参数对象”,“提供了不一致或不完整的信息”错误
- PHP中函数的声明定义及应用举例详细分析
- LCC编译器的源程序分析(16)函数的声明
- “函数声明”、“函数原型”与“函数定义”辨析