【问题标题】:Correct syntax for separate definition of templated nested class methods模板嵌套类方法的单独定义的正确语法
【发布时间】:2018-10-24 00:14:03
【问题描述】:

我正在编写一个类,除了作为模板允许不同的数字类型之外,还需要一个额外的嵌套类:

template<typename _type>
class myClass{
    // ...
    class myNestedClass{
        myNestedClass(int v1, int v2);
        myNestedClass& operator= (std::vector<int> _vals);
        operator std::vector<_type>() const;
        // ...
    }
    // ...
    template <typename _input_type> operator*= (_input_type _val);
    // ...
}

我已经掌握了大部分语法,尤其是在类定义之后如何定义方法:

template <typename _type> 
template <typename _input_type>
myClass<_type>& myClass<_type>::operator*=(_input_type _val){ /* */ };

但我无法为嵌套类方法遵循相同的方案:

template <typename _type> 
myClass<_type>::myNestedClass::myNestedClass(int v1, int v2) { /* */ };

template <typename _type> 
myClass<_type>::myNestedClass& 
template <typename _type> myClass<_type>::myNestedClass::operator= (std::vector<int> _vals) { /* */ }

template <typename _type> 
myClass<_type>::myNestedClass::operator std::vector<_type> () const { /**/ };

但是编译器抱怨最后两个方法定义,error: need 'typename' before 'myClass&lt;_type&gt;::myNestedClass' because 'myClass&lt;_type&gt;' is a dependent scope

那么我到底写错了什么?

【问题讨论】:

    标签: c++ class templates header


    【解决方案1】:

    When is the "typename" keyword necessary?

    无论如何,你已经很亲近了。修复后(加上一些错别字):

    template<typename _type>
    class myClass{
        // ...
        class myNestedClass{
            myNestedClass(int v1, int v2);
            myNestedClass& operator= (std::vector<int> _vals);
            operator std::vector<_type>() const;
            // ...
        };
        // ...
        template <typename _input_type> myClass<_type>& operator*= (_input_type _val);
        // ...
    };
    
    template <typename _type> 
    template <typename _input_type>
    myClass<_type>& myClass<_type>::operator*=(_input_type _val){ /* */ }
    
    template <typename _type>
    myClass<_type>::myNestedClass::myNestedClass(int v1, int v2) { /* */ }
    
    template <typename _type> 
    typename myClass<_type>::myNestedClass& myClass<_type>::myNestedClass::operator= (std::vector<int> _vals) { /* */ }
    
    template <typename _type> 
    myClass<_type>::myNestedClass::operator std::vector<_type> () const { /**/ }
    

    【讨论】:

    • 那么明显吗?我想是调查得太多了,错误消息中说明了答案,但我认为是其他原因造成的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多