此代码使用GNU gcc编译器进行编译,而如果使用Visual Studio 2008,则不进行编译。

错误SAS:“错误C2143:语法错误:缺少';'在“*”之前

Arbol::Nodo *是Arbol内部类的指针,如果使用代码块+ gnu gcc编译器进行编译,则可以正常工作。

template <class T>
Arbol<T>::Nodo<T>* Arbol<T>::Alta(Nodo<T>* &nodo,const T d) /////this line is highlited
{
     return nodo;
}

很奇怪,如果我取出该代码并再次编译,它将跳过下面的三个函数,
使用此函数抛出相同的错误
 template<class T>
 Arbol<T>::Nodo<T>* Arbol<T>::BuscarDevolver(const T t)
 {
     Nodo<T>* nodo = new Nodo<T>;
     return nodo;
 }

最佳答案

添加typename:

template <class T>
typename Arbol<T>::Nodo<T>* Arbol<T>::Alta(Nodo<T>* &nodo,const T d) /////this line is highlited
{
     return nodo;
}

您需要标记模板中显式类型的限定名称。

08-24 21:19