Compiling error on template method, return is instance from inner class
本问题已经有最佳答案,请猛点这里访问。
下面是一个简单的例子:
1 2 3 4 5 6 7 8 9 10 | template<typename T> class MyTemplate { class Inner {}; Inner met(); }; template<typename T> MyTemplate<T>::Inner MyTemplate<T>::met() { } |
我得到以下编译错误:
1 | expected constructor, destructor, or type conversion before 'met' |
我使用GCC。似乎编译器没有将
Clang报告如下:
1 2 3 | error: missing 'typename' prior to dependent type name 'MyTemplate<T>::Inner' MyTemplate<T>::Inner MyTemplate<T>::met() ^~~~~~~~~~~~~~~~~~~~ typename 1 error generated. |
把
1 2 3 4 5 6 7 8 9 10 | template<typename T> class MyTemplate { class Inner {}; Inner met(); }; template<typename T> typename MyTemplate<T>::Inner MyTemplate<T>::met() { } |
你把排字名放在正确的位置了吗?如果是这样,那么这一定是g++中的错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | template<typename T> struct MyTemplate { class Inner {}; Inner met(); }; template<typename T> typename MyTemplate<T>::Inner MyTemplate<T>::met() { return typename MyTemplate<T>::Inner(); } int main() { MyTemplate<int> foo; MyTemplate<int>::Inner bar = foo.met(); } |
您需要在