C++ C++;-在树上编译错误作业:错误:在‘之前需要构造函数、析构函数或类型转换*’;代币

C++ C++;-在树上编译错误作业:错误:在‘之前需要构造函数、析构函数或类型转换*’;代币,c++,templates,nested-class,C++,Templates,Nested Class,我目前正在尝试做一个家庭作业,我正在尝试首先编译我的东西(类标题在.h文件中,空定义在.inl文件中(我使用的是typename模板)) 我得到了这个错误: error: expected constructor, destructor, or type conversion before ‘*’ token 这是我的.h文件: 这是我的.inl文件: 我试图在.inl文件的末尾创建一个节点(在这些文件中称为Noeud)。 显然,我不能从类型E数据的数组中获取值 错误就在方法定义之前: Noe

我目前正在尝试做一个家庭作业,我正在尝试首先编译我的东西(类标题在.h文件中,空定义在.inl文件中(我使用的是typename模板))

我得到了这个错误:

error: expected constructor, destructor, or type conversion before ‘*’ token
这是我的.h文件:

这是我的.inl文件:

我试图在.inl文件的末尾创建一个节点(在这些文件中称为Noeud)。 显然,我不能从类型E数据的数组中获取值

错误就在方法定义之前:

Noeud * Arbre<E>::_auxPereSym(E *tabS, int debut, int fin, E **ptr, int &card) throw (std::bad_alloc)
Noeud*Arbre::\u auxPereSym(E*tabS,int首秀,int fin,E**ptr,int&card)抛出(std::bad\u alloc)
我在其他线程中读到,返回类型应该是Arbre::Noeud,因为Noeud是我的类Arbre的嵌套结构。。。但不幸的是,我无法更改头文件

有什么想法吗

谢谢你的时间和帮助


注意:如果需要翻译,请告诉我,这是法语作业。

在.inl文件(而不是您所关心的头文件)中定义时,请尝试这样做

需要在适当的范围内适当地查找返回类型

大脑提前编译代码

template<typename E>
typename Arbre<E>::Noeud * Arbre<E>::_auxPereSym(E *tabS, int debut, int fin, E **ptr, int &card) throw (std::bad_alloc)
模板
类型名称Arbre::Noeud*Arbre::_auxPereSym(E*tabS,int首秀,int fin,E**ptr,int&card)throw(std::bad_alloc)
编辑2:

将成员函数中的return语句更改为:

return new typename Arbre<E>::Noeud(tabS[0]);
返回新的类型名Arbre::Noeud(制表符[0]);

我尝试过这样做,现在我有了另一个错误,可能与此无关,但它说:../BST.h:在构造函数'Arbre_Lab8::Arbre::Noeud::Noeud::Noeud(const E&)[with E=int]:../BST.inl:78:从'Arbre_Lab8::Arbre::Noeud*Arbre Lab8::Arbre:::\u auxPereSym(E*,int,int,E**,int&)[with E=int]“../BST.inl:28:从'Arbre_Lab8::Arbre::Arbre(E*,int,int,E**,int&)[with E=int]实例化”@Pacane:我刚刚注释掉了函数体(而不是定义)'void Arbre::_auxPreOrdre(Noeud*Noeud,void(*traitement)(E&)“const”,代码在IdeOne和Comeau上编译得很好。函数“Noeud*Arbre::_auxPereSym(…)”发生了什么事?因为我试着注释掉“void…”但从_auxPereSym实例化一个节点时,我仍然得到一个错误(为了确保,您将如何实例化它?),我尝试了“returnnewtypename Arbre::Noeud(tabS[0])”,您能解释一下为什么我必须指定所有这些类型名吗,当我在定义函数之前提到它时?顺便谢谢你的帮助。