2013-03-26 121 views
0

我正在設計一個程序,它需要三個給定的點並計算出第四個來創建一個平行四邊形。我至今是:重新定義類錯誤

struct Parallelogram : public Polygon { 
    Parallelogram(Point tl, Point tr, Point bl){ 
     Point br; 
     int num = tr.y-tl.y; 
     int denom = tr.x-tl.x; 
     br.x=denom+bl.x; 
     br.y=num+bl.y; 
    } 
}; 

Parallelogram::Parallelogram(Point tl, Point tr, Point bl) 
{ 
    add(tl); 
    add(tr); 
    add(bl); 
    add(br); 
}; 

編譯時我收到以下錯誤:

hw6pr2.cpp:15:1: error: redefinition of âParallelogram::Parallelogram(Point, Point, Point)â 
hw6pr2.cpp:6:2: error: âParallelogram::Parallelogram(Point, Point, Point)â previously defined here 

我的問題是:如果我從多邊形類派生正確的方法是什麼?如果是的話,爲什麼我會得到這個錯誤?

+0

因爲你正在重新定義'平行四邊形你所得到的錯誤: :平行四邊形(點,點,點)',就像編譯器告訴你的一樣。刪除其中一個定義。 – juanchopanza 2013-03-26 22:48:54

+0

編譯器的消息看起來很清楚。你提供了兩個相同構造函數的實現。 – 2013-03-26 22:49:04

回答

2

您有Parallelogram::Parallelogram(Point, Point, Point)的兩個定義;一個在課堂上,一個在室外。你不能有一個函數的多個定義。

假設add爲您的Polygon增加了一個點,您似乎真的只希望第二個定義成爲第一個定義的一部分。您可以定義一個類裏面,像這樣:

struct Parallelogram : public Polygon { 
    Parallelogram(Point tl, Point tr, Point bl) { 
    Point br; 
    int num = tr.y-tl.y; 
    int denom = tr.x-tl.x; 
    br.x=denom+bl.x; 
    br.y=num+bl.y; 

    add(tl); 
    add(tr); 
    add(bl); 
    add(br); 
    } 
}; 

或者,你可以聲明它的類裏,然後外面定義它:

struct Parallelogram : public Polygon { 
    Parallelogram(Point tl, Point tr, Point bl); 
}; 

Parallelogram::Parallelogram(Point tl, Point tr, Point bl) { 
    Point br; 
    int num = tr.y-tl.y; 
    int denom = tr.x-tl.x; 
    br.x=denom+bl.x; 
    br.y=num+bl.y; 

    add(tl); 
    add(tr); 
    add(bl); 
    add(br); 
} 
+0

謝謝。通過查看一些標準類來學習,並將一個例子誤解爲具有多個定義。 – Robotguy27 2013-03-27 00:00:09

+0

@ Robotguy27你剛剛接受我的回答,正好及時給了我一天中超過400的聲望。感謝那! – 2013-03-27 00:04:07

0

修復。 。 。

Parallelogram::AnyWordButParallelogram(Point tl, Point tr, Point bl) 
{ 
add(tl); 
add(tr); 
... 

如果你想要在構造上調用該代碼(因爲我只能猜測)。 。

struct Parallelogram : public Polygon { 
Parallelogram(Point tl, Point tr, Point bl){ 
    ... 

    AnyWordButParallelogram(Point tl, Point tr, Point bl) 
} 

只要確保函數是在構造函數之前定義的。