2013-10-03 27 views
4

我有以下代碼如何解決使用模板類與靜態constexpr時的鏈接錯誤?

#include <iostream> 
template <class T> 
class A 
{ 
public: 
    static constexpr int arr[5] = {1,2,3,4,5}; 
}; 

template<> constexpr int A<int>::arr[5]; 

int main() 
{ 
    A<int> a; 
    std::cout << a.arr[0] << std::endl; 
    return 0; 
} 

編譯通過得很好,但我有一個鏈接錯誤,我不明白

g++ -std=c++11 test.cpp -o test 
/tmp/ccFL19bt.o: In function `main': 
test01.cpp:(.text+0xa): undefined reference to `A<int>::arr' 
collect2: error: ld returned 1 exit status 

回答

7

你不能僅僅把它定義爲一個類型,則需要

template<class T> constexpr int A<T>::arr[5]; 
+1

+1。 [正確](http://coliru.stacked-crooked.com/a/4ff77fb898d3c00a)。 – Nawaz

+0

假設我有'typedef A B;'在我的頭文件中,有沒有一種方法可以使用'B'類型來分配'arr'或者我必須使用'A'類型? – e271p314

+1

@ e271p314 AFAIK你需要使用'A'。 –