【问题标题】:Template constructor in template class must be defined in the class definition?模板类中的模板构造函数必须在类定义中定义吗?
【发布时间】:2012-08-14 01:36:52
【问题描述】:

假设我用模板构造函数编写了一个模板类,就像这样。

template<typename T>
class X{


    template<typename S>
    X(X<S> x){}
};

编译得很好。但是,当我尝试在模板声明之外定义构造函数时,如下所示:

template<typename T>
class X{


    template<typename S>
    X(X<S> x);
};


template<typename T, typename S>
X<T>::X(X<S> y){}

我收到以下错误:

error: invalid use of incomplete type ‘class X<T>’

为什么?是不是不能在类声明之外定义模板类的模板构造函数?

【问题讨论】:

    标签: c++ templates constructor


    【解决方案1】:

    你的类只有一个模板参数,而且你在里面基本上有一个模板函数,所以你需要

    template<typename T>
    template <typename S>
    X<T>::X(X<S> y){}
    

    【讨论】:

      【解决方案2】:

      您有两个级别的模板,并且必须分别指定它们。

      template<typename T>
      template<typename S>
      X<T>::X(X<S> y){}
      

      【讨论】:

        【解决方案3】:

        试试这个:

        template<typename T>
        template<typename S>
        X<T>::X()( X<S> y )
        {
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-08
          • 1970-01-01
          • 2022-07-22
          • 1970-01-01
          • 2015-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多