2012-07-02 82 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

相關問題