2010-10-22 103 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