【发布时间】:2013-05-05 15:12:28
【问题描述】:
您好,我收到以下错误:
Error 9 error LNK1120: 2 unresolved externals
Error 8 error LNK2019: unresolved external symbol "public: virtual __thiscall physics::~physics(void)" (??1physics@@UAE@XZ) referenced in function "public: virtual void * __thiscall physics::`scalar deleting destructor'(unsigned int)" (??_Gphysics@@UAEPAXI@Z)
Error 7 error LNK2019: unresolved external symbol "public: virtual __thiscall student::~student(void)" (??1student@@UAE@XZ) referenced in function __unwindfunclet$??0physics@@QAE@XZ$0
使用以下代码发生:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class student{
protected:
string fName,sName;
int id;
vector<string> cname;
vector<int> cmark;
public:
virtual ~student();
virtual void addCourse(string name, int mark)=0;
};
class physics : public student{
public:
physics(){//Initialize default values
fName="blank";
sName="blank";
id=0;
cname.push_back("none");
cmark.push_back(0);
};
~physics();
void addCourse(string name, int mark){
if(cname.size()==1){//override default value for a size of 1
cname[0]=name;
cmark[0]=mark;
}
else{
cname.push_back(name);
cmark.push_back(mark);
}
}
};
上面的编译很好,但是当我尝试使用以下方法在 main() 中初始化一个对象时:
int main(){
//Database Storage
vector<student*> DB;
DB.push_back(new physics);
}
那是我得到错误的时候(删除 push_back 行可以修复它,但我的程序需要这个)。我做错了什么?
【问题讨论】:
-
原来在析构函数的末尾添加大括号修复了它。这有什么区别? 〜学生(){};而不是 ~student();
-
~student(){}后面的分号不是非法的,但它是不必要的,也没有意义。你也不要把它放在其他内联函数定义之后。
标签: c++ vector polymorphism unresolved-external