gpt4 book ai didi

c++ - 为什么 Visual Studio 2010 会给我此代码的语法错误?

转载 作者:行者123 更新时间:2023-11-28 03:34:45 26 4
gpt4 key购买 nike

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

最佳答案

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

template<typename T> class nodAB;

您是否做出了前向声明(forward declaration)?

此外,如果这些类在不同的头文件中声明,您可能会遇到循环头文件包含问题。向我们展示这些声明如何跨文件分布,以及如何将这些文件相互包含。

关于c++ - 为什么 Visual Studio 2010 会给我此代码的语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11299527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com