2014-02-24 40 views
5

我认为这很容易,但它不能按我期望的方式工作。这里的正确语法是什么?在类定义之外为模板类定义运算符[]()(数组订阅)

TemplateClass.h

template <typename T> 
class TemplateClass 
{ 
    T & operator[](size_t n); 

TemplateClass.cpp

#include "TemplateClass.h" 

template <typename T> 
T & TemplateClass::operator[](size_t n) 
{ 
    // member declaration not found 
} 
+0

您确定要这么做吗?对于模板,通常在头文件中定义完整的东西,根本没有.cpp文件。 –

+0

啊,因为链接器需要在实例化模板时找到定义?好点子。 –

+0

@ user2887734是的! –

回答

7

您需要提供全班的名字 - 包括模板参数:

template <typename T> 
T & TemplateClass<T>::operator[](size_t n) 
{ 
    // ... 
} 

(也注意范围解析运算符是::,而不是:。)

+4

......并且你不把实现一个单独的编译单元! –