哪位大神能幫我看看哪里出現(xiàn)問題了嗎?我已經(jīng)定義子類虛函數(shù)了,但還是出現(xiàn)問題
#ifndef?PERSON_H #define?PERSON_H #include<string> using?namespace?std; class?Person { public: ?Person(string?name); ?virtual~Person(); ?virtual?void?worker()?=?0; protected: ?string?m_strName; }; #endif
#include"Person.h"
#include<iostream>
using namespace std;
Person::Person(string name)
{
?m_strName = name;
?cout << "Person()" << endl;
}
Person::~Person()
{
?cout << "~Person()" << endl;
}
#ifndef WORKER_H
#define WORKER_H
#include"Person.h"
class Worker:public Person
{
public:
?Worker(string name,int age);
?virtual~Worker();
?virtual void work();
protected:
?int m_iAge;
};
#endif
#include"Worker.h"
#include<iostream>
using namespace std;
Worker::Worker(string name, int age):Person(name)
{
?m_iAge = age;
?cout << "Worker()" << endl;
}
Worker::~Worker()
{
?cout << "~Worker()" << endl;
}
void Worker::work()
{
?cout << "work()" << endl;
}
#ifndef DUSTMAN_H
#define DUSTMAN_H
#include"Worker.h"
class Dustman:public Worker
{
public:
?Dustman(string name, int age);
?virtual~Dustman();
?virtual void work();
};
#endif
#include"Dustman.h"
#include<iostream>
using namespace std;
Dustman::Dustman(string name, int age):Worker(name,age)
{
?cout << "Dustman()" << endl;
}
Dustman::~Dustman()
{
?cout << "~Dustman()" << endl;
}
void Dustman::work()
{
?cout << "work()" << endl;
}
#include"Dustman.h"
#include"Worker.h"
#include<iostream>
using namespace std;
int main()
{
?Worker worker("zhang", 15);
?return 0;
}
嚴(yán)重性?代碼?說明?項目?文件?行?禁止顯示狀態(tài)
錯誤?C2259?“Worker”: 不能實例化抽象類?dustman?d:\visual studio 2015\projects\dustman\dustman\demo.cpp?8?
嚴(yán)重性?代碼?說明?項目?文件?行?禁止顯示狀態(tài)
錯誤(活動)??不允許使用抽象類類型 "Worker" 的對象:?dustman?d:\Visual Studio 2015\Projects\dustman\dustman\demo.cpp?8?
2017-04-28
你的Worker繼承的是一個抽象類,繼承后就把派生類也變成抽象類了,解決方法:派生類的void Worker::work()改成void Worker::worker();或者把抽象類的Person的virtual void worker()=0改成virtual void work()=0;就可以解決啦。望采納!
2017-04-28
你繼承了一個抽象類的純虛函數(shù)virtual void worker();你的派生類的Worker()函數(shù)也應(yīng)該接上抽象類的virtual void worker();你的派生類沒有worker(),只有work(),所以繼承過來的worker()把子類也變成抽象類了;