2011-09-29 147 views
1

此代碼使用GNU gcc編譯器進行編譯,而如果使用Visual Studio 2008,則不會編譯。爲什麼這段代碼不能用MS編譯器編譯?

錯誤sas:「error C2143:syntax error:missing';'之前「*」

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; 
} 
+0

第二個例子中的錯字? nodo? – kenny

+0

只是重新編輯。 – HoNgOuRu

回答

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

您需要標記模板中顯式類型的限定名稱。

+0

錯誤消失了,讓我試試吧 – HoNgOuRu

+0

這是一款視覺工作室的東西嗎? – HoNgOuRu

+0

@HoNgOuRu,這是一個C++的東西。 – MSN