C ++类模板复制构造函数返回类型

时间:2016-02-27 22:04:40

标签: c++ class templates

我已经宣布operator=这样:

HashTable& operator=(const HashTable& aTable);

我可以通过以下方式在课堂外定义它:

template <typename HashElement>
HashTable& HashTable<HashElement>::operator=(const HashTable& aTable)
{
    /*Do the copy thing*/
    return *this;
}

我希望使用以下代码进行编译:

HashTable<EngWord> hashTable;
HashTable<EngWord> hashTableA;
hashTableA = hashTable;

但编译器并不喜欢定义的签名。错误消息是:

HashTable: suer of class template requires template argument list
HashTable<HashElement>::operation=': unable to match function definition or an existing declaration

我在互联网上看到的应该是我写的方式。怎么了?

1 个答案:

答案 0 :(得分:3)

您必须在返回类型中添加模板参数列表,如错误消息所示:

HashTable<HashElement>& HashTable<HashElement>::operator=(const HashTable& aTable)

参数不需要模板参数列表,因为编译器已经知道您正在定义HashTable<HashElement>::operator=,您可以在其中使用injected-class-name

同样适用于在类模板定义中声明operator=。您可以在那里省略返回类型模板参数,但不能在类外部进行定义。