Привет я получаю следующие ошибки:Нерешенные Экстерналии при использовании полиморфизма
Error 9 error LNK1120: 2 unresolved externals
Error 8 error LNK2019: unresolved external symbol "public: virtual __thiscall physics::~physics(void)" ([email protected]@[email protected]) referenced in function "public: virtual void * __thiscall physics::`scalar deleting destructor'(unsigned int)" ([email protected]@[email protected])
Error 7 error LNK2019: unresolved external symbol "public: virtual __thiscall student::~student(void)" ([email protected]@[email protected]) referenced in function [email protected]@[email protected]$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);
}
}
};
выше компилируется нормально, но когда я пытаюсь инициализировать объект в основной() с помощью:
int main(){
//Database Storage
vector<student*> DB;
DB.push_back(new physics);
}
Вот когда я получаю ошибки (удаление push_back линии фиксирует ее, но мне это нужно для моей программы). Что я делаю не так?
Выключает добавление фигурных скобок к концу деструкторов. Какая разница? ~ student() {}; вместо ~ student(); – Edd
Точка с запятой после '~ student() {}' не является незаконной, но она не нужна и не имеет смысла. Вы не ставите его после определения других встроенных функций. –