2014-02-24 36 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

......並且你不把實現一個單獨的編譯單元! –