【急】C++一直出現linker error

#include <iostream>

using namespace std;

class Shape

{

public:

virtual double compute_area();

virtual void draw();

};

class Circle : public Shape

{

private:

double x,y;

double radius;

public:

Circle (double x,double y,double radius);

double compute_area();

void draw();

};

class Rectangle:public Shape

{

private:

double x1,y1,x2,y2;

public:

Rectangle(double x1,double y1,double x2, double y2);

double compute_area();

void draw();

};

Circle::Circle(double s,double t,double r)

{

x=s;

y=t;

radius=r;

};

double Circle::compute_area()

{

return (radius*radius*3.1416);

}

void Circle::draw()

{

cout<<\"Drawing the circle!\"<<endl;

}

Rectangle::Rectangle(double a,double b,double c,double d)

{

x1=a;

y1=b;

x2=c;

y2=d;

}

double Rectangle::compute_area()

{

return fabs((x2-x1)*(y2-y1));

}

void Rectangle::draw()

{

cout<<\"Drawing the rectangle!\"<<endl;

}

int main()

{

int i;

Shape *shape[2];

shape[0]=new Circle(100.0,200.0,100.0);

shape[1]=new Rectangle(100.0,200.0,300.0,400.0);

for(i=0;i<2;i++)

cout<<\"Area of shape[\"<<i<<\"]=\"<<shape[i]->compute_area()<<endl;

for(i=0;i<2;i++)

shape[i]->draw();

delete shape[0];

delete shape[1];

system(\"PAUSE\");

return 0;

}

____________________________________________________

以上是我的程式碼,

這題不管我用專案寫還是全寫在一個檔案裡,

都出現linker error的訊息,

而且我完全找不到bug在哪@@

希望有人可以告訴我出現linker error該如何解決,

謝謝~

已更新項目:

C:\DOCUME~1\JINFAN01\LOCALS~1\Temp\ccUtaaaa.o(.text$_ZN5ShapeC2Ev+0x8) In function `ZN5ShapeC2Ev':

[Linker error] undefined reference to `vtable for Shape'

↑一直跑出來的錯誤訊息

2 個解答

評分
  • 明虎
    Lv 5
    1 0 年前
    最佳解答

    我是用 VC++ 6.0

    第一個錯誤:

    少了

    #include <math.h>

    第二個錯誤:

    class Shape

    {

    public:

    virtual double compute_area();

    virtual void draw();

    };

    compute_area()跟draw() 要有東西

    改成:

    class Shape

    {

    public:

    virtual double compute_area();

    {

    return 0.0;

    }

    virtual void draw()

    {

    return;

    }

    };

    試試看會不會 work

    參考資料: 自己
    • Commenter avatar登入以對解答發表意見
  • Lv 7
    1 0 年前

    我想你是在Dev-Cpp裡compile的吧?在VC++裡你就不會遇到這種問題了.(會遇到fabs()的問題)

    在Shape class裡你有兩個virtual成員函式叫compute_area()和draw(). 在程式裡你雖沒以Shape為型態來建照實體.但是你還是要把這兩個virtual成員函式寫全.有兩種方法寫全

    2006-06-06 06:00:23 補充:

    1.如果你這Shape是個抽象的型態.也就是說在程式裡是不會也不能有(因不合邏輯)以Shape為型態的實體的話.請把這兩個virtual成員函式設定為pure virtual成員函式.

    2.如果你這Shape並不是個抽象的型態.也就是說在程式裡允許擁有以Shape為型態的實體的話.請寫出兩個virtual成員函式的定義.

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。