2010-10-22 104 views
0

我的任務是從二叉樹派生的二叉搜索樹,在我的驅動程序中,這是我創建BST對象的方式。但我有點困惑,因爲我知道必須有一個構造函數,但是在我的任務中沒有實際調用派生類的構造函數。C++派生類

int main() { 
    int x = 0; 
    int n = 0; 
    int len = 0; 
    int total = 0; 
    int seed = 0; 
    bool y; 
    cin >> n; 

    vector<int> v; 
    binSTree<int> t; 

我在使用這些「前」和「代碼」標籤很難,矢量實際上是vector<int> v;,樹是真的binSTree<int> t;還有不到和更大的周圍當然INT跡象。

我在程序的錯誤如下:

In file included from prog6.cc:2: 
    binSTree.h:1:9: error: macro names must be identifiers 
prog6.cc: In function ‘int main()’: 
prog6.cc:16: error: ‘binSTree’ was not declared in this scope 
+0

SO不使用代碼的HTML代碼標籤,但縮進四個空格的東西將顯示爲包含所有尖括號的代碼。 – 2010-10-22 01:07:18

+2

你能告訴我們頭文件'binSTree.h'嗎? ''在'prog6.cc'中#include「binSTree.h」嗎? – birryree 2010-10-22 01:08:12

+0

此外,你還沒有顯示錯誤的代碼。 binSTree.h的第一行是什麼? – 2010-10-22 01:08:36

回答

1

如果基類是默認施工的,並派生類不會對基類構造函數的顯式調用時,編譯器插入到呼叫調用派生類構造函數之前的默認基類構造函數。

但是這什麼都沒有做與你所遇到的錯誤,那就是:

In file included from prog6.cc:2: 
    binSTree.h:1:9: error: macro names must be identifiers 

記住,永遠總是看看你的編譯器產生的第一個錯誤,而不是一個在底部。這意味着你有,在某處binSTree.h,在第幾行,像

#define ... 

,其中點是什麼無效。

+0

thankyou我必須記住這一點,我弄亂了我的#ifndef ... #define ...陳述再次感謝! – rajh2504 2010-10-22 01:24:47

+0

這是否總是適用於模板?如果我在實例化過程中向下滾動以查看錯誤來自哪裏,我認爲它會提供更多上下文。 – Chubsdad 2010-10-22 02:19:42

+0

@Chubsdad:好吧,對於模板來說,它幾乎是一個垃圾短信,但推理是因爲編譯器應該在遇到錯誤時立即停止,因爲根據定義,編譯器無法猜測出您的代碼要做什麼了。有些編譯器試圖解析錯誤,因爲他們想盡可能多地向您顯示有關代碼的信息。 – SingleNegationElimination 2010-10-22 02:28:11