2012-07-10 95 views
3

是否有一種爲模板類定義成員函數的正確方法,該模板類返回子類的實例?返回子類型的成員模板函數

下面是不VC++編譯2010爲例:

template<class T> class A { 
public: 
    class B { 
    public: 
     T i; 
    }; 

    A(); 
    B* foo(); 
}; 

///////////////////////////////////////////// 

template<class T> A<T>::A() {} 

template<class T> A<T>::B* A<T>::foo() { 
    cout << "foo" << endl; 
    return new B(); 
} 

我得到

Error 8 error C1903: unable to recover from previous error(s); stopping compilation 

在該行的定義foo的開始。

我有正確的夾雜物和名稱空間聲明iostream

謝謝你們!

編輯:

按照要求,這裏是錯誤的完整列表,所有在同一行:

Warning 1 warning C4346: 'A<T>::B' : dependent name is not a type 
Error 2 error C2143: syntax error : missing ';' before '*' 
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
Error 4 error C1903: unable to recover from previous error(s); stopping compilation 
Warning 5 warning C4346: 'A<T>::B' : dependent name is not a type 
Error 6 error C2143: syntax error : missing ';' before '*' 
Error 7 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
Error 8 error C1903: unable to recover from previous error(s); stopping compilation 
+0

給我們 「先前的錯誤(S)」 了。也許在A :: B缺失之前的typename? – PiotrNycz 2012-07-10 13:50:34

+0

謝謝@PiotrNycz,請參閱編輯。 – Mau 2012-07-10 14:03:21

+0

可能的重複[哪裏和爲什麼我必須把「模板」和「typename」關鍵字?](http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to -put-the-template-and-typename-keywords) – 2012-07-10 15:05:27

回答

相關問題