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 で構文エラーが発生するのはなぜですか?

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();
};
4

2 に答える 2

2

あなたのクラスは循環的にお互いを参照しているようです。これは、少なくとも 1 つのテンプレート クラスの前方宣言が必要であることを示します。より正確には、nodAB<T>テンプレートの定義の前に、テンプレートの前方宣言が必要ですarbBinar

template<typename T> class nodAB;

その前向きな宣言をしましたか?

さらに、これらのクラスが異なるヘッダー ファイルで宣言されている場合、循環ヘッダー インクルードの問題が発生する可能性があります。これらの宣言がファイル間でどのように分散されているか、およびこれらのファイルを相互に含める方法を示してください。

于 2012-07-02T19:02:10.647 に答える
0

arbBinarが の前に宣言されていることを確認してくださいnodAB

于 2012-07-02T19:01:00.170 に答える