C++ 为类定义之外的模板类定义运算符[]()(数组订阅)

C++ 为类定义之外的模板类定义运算符[]()(数组订阅),c++,templates,C++,Templates,我原以为这很容易,但它没有按我预期的方式工作。这里的正确语法是什么 模板类.h template <typename T> class TemplateClass { T & operator[](size_t n); 模板 类模板类 { 操作员[](尺寸); 模板类.cpp #include "TemplateClass.h" template <typename T> T & TemplateClass::operator[](size_t

我原以为这很容易,但它没有按我预期的方式工作。这里的正确语法是什么

模板类.h

template <typename T> 
class TemplateClass
{
  T & operator[](size_t n);
模板
类模板类
{
操作员[](尺寸);
模板类.cpp

#include "TemplateClass.h"

template <typename T>
T & TemplateClass::operator[](size_t n)
{
  // member declaration not found
}
#包括“TemplateClass.h”
模板
T&TemplateClass::运算符[](大小\u T n)
{
//找不到成员声明
}

您需要提供整个类名–包括模板参数:

template <typename T>
T & TemplateClass<T>::operator[](size_t n)
{
  // ...
}
模板
T&TemplateClass::运算符[](大小\u T n)
{
// ...
}

(还要注意,作用域解析运算符是
,而不是

您确定要这样做吗?对于模板,您通常在标题中定义整个内容,而根本没有.cpp文件。啊,因为链接器在实例化模板时需要找到定义?这一点很好。@user2887734是的!这是一个常见问题解答:@ChristianHackl这里还有一篇流行的帖子,所以:……不要您将实现放在一个单独的编译单元中!