2012-07-02 56 views
0
template<typename T> 
class nodAB : public arbBinar<T> 
{ 
private: 
    T info; 
    nodAB<T> *tata; 
    nodAB<T> *st; 
    nodAB<T> *dr; 

public: 
    nodAB(const T& x):info(x),tata(0),st(0),dr(0){}; 
    nodAB(const T& x, nodAB<T> *t):info(x),tata(t),st(0),dr(0){}; 

    virtual nodAB<T>* copiaza(); 
    virtual nodAB<T>*insereaza (T& item); 
    virtual void parcurge_invers(); 
    void setInfo(T& x) {info =x;} 
    void setTata(nodAB<T> *t) {tata=t;} 
    void setStang(nodAB<T> *stang) {st=stang;} 
    void setDrept(nodAB<T> *drept) {dr=drept;} 

    T getInfo() const {return info;} 
    nodAB<T> *getStang() const {return st;} 
    nodAB<T> *getDrept() const {return dr;} 
    nodAB<T> *getTata() const {return tata;} 

    bool esteRadacina()const 
    { 
     return tata==NULL; 
    } 
    bool esteFrunza()const 
    { 
     return (st==NULL && dr==NULL); 
    } 
    bool esteFiuStang()const 
    { 
     return tata!=NULL && tata->getStang()==this; 
    } 
    bool esteFiuDrept()const 
    { 
     return tata!=NULL && tata->getDrept()==this; 
    } 
    ~nodAB(); 
}; 

我的问题是为什么在class nodAB: public arbBinar<T> { Visual Studio给我一个语法错误?为什么Visual Studio 2010会为此代码提供语法错误?

template<typename T> 
class arbBinar{ 
protected: 
    nodAB<T> *radacina; 

public: 
    arbBinar():radacina(0){} 
    arbBinar(nodAB<T> *rad) {radacina=rad;} 
    nodAB<T> *getRadacina(){return radacina;} 
    ~arbBinar(); 
}; 
+1

它究竟说什么?哪条线?什么是'arbBinar '?它在哪里宣布? – AnT

+0

错误错误C2143:语法错误:缺少前 '' '<' \t C:\用户\安德烈\桌面\ SDA项目\ SDA \ SDA \ nodab.h SDA – bngandrei

+0

模板 类arbBinar { protected: \t nodAB * radacina; 公共: \t arbBinar():radacina(0){} \t arbBinar(nodAB *弧度){radacina =弧度;} \t nodAB * getRadacina(){返回radacina;} \t〜arbBinar(); }; – bngandrei

回答

2

我看到你们的课程是以循环的方式相互引用的。这将表明至少需要一个模板类的前向声明。更确切地说,在定义arbBinar模板之前需要前向声明nodAB<T>模板。

template<typename T> class nodAB; 

您是否做了前瞻性声明?此外,如果这些类是在不同的头文件中声明的,则可能在循环头包含中存在问题。向我们展示这些声明是如何分布在文件中的,以及如何将这些文件包含在对方中。

0

确保arbBinarnodAB之前声明。

+0

他们在不同的头文件,所以是的,我认为这不是问题... – bngandrei

+1

@ user1494130:这*完全*的问题。您必须在'nodAB'之前声明'arbBinar',并且必须在'arbBinar'之前声明'nodAB'。这意味着前向声明是绝对必需的。 – AnT

+0

是的,你是对的,我有循环依赖,这就是为什么它不起作用。我必须在二叉搜索树中使用实现来创建一个抽象的有序列表 – bngandrei

相关问题