为什么这段代码不能用MS编译器编译?

时间:2011-09-29 01:54:17

标签: c++ visual-studio-2008 compiler-errors

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

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

Arbol :: Nodo *是指向Arbol内部类的指针,如果使用codeblocks + 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;
 }

1 个答案:

答案 0 :(得分:3)

添加typename

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

您需要在模板中明确标记类型的限定名称。