【问题标题】:Template class assignment operator模板类赋值运算符
【发布时间】:2019-06-30 23:13:32
【问题描述】:

我对名为“DynamicArray”的模板类有疑问。我唯一的问题是当我定义我的赋值运算符时。它给了我两个不同的错误

1) 它给我的第一个错误是

DynamicArray& 说“类模板“DynamicArray”的参数列表丢失”

2) 第二个错误是

DynamicArray::operator= 表示“模板参数列表必须与参数列表匹配”

这是我的程序:

DynamicArray.h

#pragma once
#include <iostream>

using namespace std;

template<typename T>
class DynamicArray
{
public:
    DynamicArray();
    DynamicArray(const DynamicArray &d);
    DynamicArray& operator=(const DynamicArray &d);
    ~DynamicArray();
};

template<typename T>
DynamicArray<T>::DynamicArray()
{

}

template<typename T>
DynamicArray<T>::DynamicArray(const DynamicArray &d)
{

}

template<typename T>
DynamicArray& DynamicArray<T>::operator=(const DynamicArray &d)
{

}

template<typename T>
DynamicArray<T>::~DynamicArray()
{

}

我查看了多个示例,但无法弄清楚为什么会出现此问题。

谁能告诉我我在这里做错了什么?

【问题讨论】:

  • ... 和 operator= 应该返回一个 DynamicArray&lt;T&gt;&amp;
  • “类模板“DynamicArray”的参数列表丢失”非常冗长。你想通过引用返回DynamicArray,但你没有指定它的模板参数,所以编译器不知道你到底想返回什么(如果你想总是返回DynamicArray&lt;int&gt;出于某种原因...... )
  • 我尝试将定义放在同一个头文件中,然后再将它们移动到 .cpp 文件中,但遇到了同样的问题。
  • 只有其中之一。修复我提到的那个会删除另一个。

标签: c++ class templates assignment-operator


【解决方案1】:
  1. 按照尼尔的建议,通过Why can templates only be implemented in the header file? 的链接将完整的模板放入头文件中。
  2. operator= 的返回值应该是DynamicArray&lt;T&gt;&amp;

【讨论】:

    猜你喜欢
    • 2011-11-14
    • 2015-01-27
    • 2016-01-04
    • 2016-05-28
    • 2020-02-28
    • 2015-02-25
    • 2011-05-23
    相关资源
    最近更新 更多