錯誤處理1: D:\a1-C++\C++作業\第五次1.cpp undefined reference to `vtable for Shape'


在編譯程序的時候遇到此誤,在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; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM