在編譯程序的時候遇到此誤,在google上查,很多地方都說是因為虛基類里面的虛擬析構函數沒有提供實現導致的。但是我的已經提供了實現,也不行。最后發現是其他沒有提供實現的虛函數造成的。所以,在一個虛基類里,如果不提供函數的缺省實現,一定要定義成純虛函數,否則就會造成此問題。
#include <iostream> using namespace std; #define pi 3.14
class Shape{ public: static double sum; virtual void show()const; };
double Shape::sum = 0;
class Circle : public Shape{ private: double r; public: Circle(double r1):r(r1){ sum += r * r * pi; } void show()const{ cout << "圓:" << endl; cout << "圓的半徑:" << r << endl; cout << "圓的面積:" << r * r * pi << endl; } }; class Rectanglez: public Shape{ private: double x; public: Rectanglez(double x1): x(x1){ sum += x * x; } void show()const{ cout << "正方形:" << endl; cout << "正方形的邊長:" << x << endl; cout << "正方形的面積:" << x * x << endl; } }; class Rectanglec: public Shape{ private: double x, y; public: Rectanglec(double x1, double y1): x(x1), y(y1){ sum += x * y; } void show()const{ cout << "長方形:" << endl; cout << "長方形的長、寬: " << x << y << endl; cout << "長方形的面積:" << x * y << endl; } }; int main(){ Shape *p; char flag = 'Y'; while(toupper(flag) == 'Y'){ int select; cout << "請選擇需要輸入的類型:1(圓), 2(正方形), 3(長方形)" << endl; cin >> select; switch(select){ case 1: double r; cin >> r; p = new Circle(r); p->show(); delete p; break; case 2: double x; cin >> x; p = new Rectanglez(x); p->show(); delete p; break; case 3: double x1, y; cin >> x1 >> y; p = new Rectanglec(x1, y); p->show(); delete p; break; default: cout << "輸入錯誤!" << endl; break; } cout << "是否繼續輸入:N or Y ?" << endl; cin >> flag; } return 0; }