【问题标题】:Template unable to match function definition to an existing declaration模板无法将函数定义与现有声明匹配
【发布时间】:2016-05-11 12:34:05
【问题描述】:

我正在处理 Array 的模板类,但函数似乎与声明不匹配,我不明白为什么:

template <class Type>
class Array
{
private:
    Type* m_data;
    unsigned int _size;

public:
    template <class Type> Array(unsigned int initial_size); // Function
}

由于函数本身与声明匹配,我什至按了 Ctrl+'。'让VS执行该功能但仍然出现错误。我看到了类似的问题,但似乎他们都在我没有使用的参数中使用了 Type。

template<class Type>
Array<Type>::Array(unsigned int initial_size)
{
    _size = initial_size;
    m_data = new Type(initial_size);
}

'Array::Array': 无法将函数定义与现有声明匹配

为什么会发生错误?

【问题讨论】:

    标签: c++ class templates error-handling declaration


    【解决方案1】:

    构造函数声明中无需使用template

    template <class Type> Array(unsigned int initial_size);
    

    只需使用:

    Array(unsigned int initial_size);
    

    【讨论】:

    • 这无法完成,因为您需要命名空间 Array:: 而没有 template 类型可以不被认出
    • @Ofek.T.,我说的是类中的声明,而不是实现。
    • 哦,好吧,当我将它从声明中删除并保留在实现中时,它就很好了。谢谢。
    【解决方案2】:

    这是因为Array&lt;T&gt; 中没有声明函数(构造函数)Array(unsigned int initial_size)。有一个构造函数模板template &lt;class Type&gt; Array(unsigned int initial_size).

    所以,你在类模板中有一个构造函数模板。

    你可以这样定义它:

    template<typename Type>
    template<typename AnotherType>
    Array<Type>::Array(unsigned int initial_size){
    

    但是由于您似乎没有使用构造函数模板的模板参数,因此不清楚为什么它首先是模板。

    如果您不需要构造函数模板,那么我建议改用常规构造函数:

    public:
    Array(unsigned int initial_size);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      相关资源
      最近更新 更多