2010-06-22 62 views
2

我正在使用NetBeans IDE 6.8創建C++項目。然而,儘管我使用類繼承,但在我看來,它無法識別派生類。這是我有:不是C++ IDE NetBeans或Eclipse支持類繼承嗎?

class A 
{ 
public: 
    A(vector<double> a, double b) {...} 
}; 

class B : public A 
{ 
public: 
    additionalfunction(...) {...} 
}; 

main() 
{ 
    vector<double> c = something; 
    double d = 0; 
    B b=B(c, d); 
} 

而且編譯器告訴我「B(c,d)」沒有聲明。我嘗試了Eclipse C++,它告訴我同樣的事情。這是爲什麼?是否因爲兩個IDE都不支持C++繼承?我該怎麼辦?

任何答覆表示讚賞。

+1

您是否爲B提供了正確的構造函數? (即一個需要一個向量和兩個參數) – Darel 2010-06-22 14:14:31

+0

我很確定支持繼承不是由IDE決定的,但它是IDE使用的編譯器,它決定你將得到什麼錯誤(並非所有的C/C++編譯器創造平等)。你從哪裏得到這個代碼示例,以及他們告訴你在什麼IDE中使用它?它應該編譯好嗎?你知道NetBeans和Eclipse使用的是什麼編譯器嗎? – FrustratedWithFormsDesigner 2010-06-22 14:14:36

+0

這是gcc。謝謝。問題已經解決了。 – Ellen 2010-06-22 14:32:40

回答

1

我建議落實在B類構造函數

+0

謝謝。得到它了。 – Ellen 2010-06-22 14:30:24

4

子類不繼承構造函數。你試圖調用B(double,double),但是沒有B(double,double)。你可以定義B(double,double),或者你可以使用C++ FAQ中的this pattern

+0

我明白了。謝謝。這有很大幫助。 – Ellen 2010-06-22 14:30:52

4

在C++中,構造函數(和析構函數)不像常規方法那樣繼承。你需要定義B(vector,double)。但是,您可以在初始化列表中的父構造函數上執行一種調用:

public: 
    B(vector<double> a, double b) : A(a, b){ 
     ... 
    } 
+0

謝謝。這樣可行。 – Ellen 2010-06-22 14:30:09