2014-10-18 100 views
0

在我的主,我從一個模板類創建一個對象,然後我把我的排序方法(模板法) 但是它讓我main.obj文件中的錯誤。如何將數組傳遞給模板函數?

錯誤:

LNK2019: unresolved external symbol "public: void __thiscall SelectionSort<int [0]>::IterativeSort(int * const,unsigned int)" ............ 

呼叫主:

SelectionSort<int[]> smallArraySort; 
smallArraySort.IterativeSort(smallArray, smallSize); 

頭文件SelectionSort.h

template <class T> 
class SelectionSort 
{ 
    public: 
     void IterativeSort(T data, unsigned int size); 
     void RecursiveSort(T data, unsigned int size); 

}; 

排序代碼:SelectionSort.cpp

#include "SelectionSort.h" 

template<class T> 
void SelectionSort<T> ::IterativeSort(T data, unsigned int size) 
{ 
    int temp = data[0]; 
    int greaterNum = 0 


     for (unsigned int index = 0; index < size; index++) 
    { 
     for (unsigned int inner = index; inner < size; inner++) 
     { 
      if (temp>data[inner]) 
      { 
       greaterNum = temp; 
       temp = data[inner]; 
       data[inner] = greaterNum; 

      } 


     } 
    } 
} 
+0

是的,它被包括在內 – 2014-10-18 06:32:11

+0

讓我們問一個稍微有點不同的問題:SelectionSort :: IterativeSort的*實現是否已經在這裏發佈了,它包含在'main.cpp'它)?即其*不*執行一些其他.cpp文件(因爲你在這裏),*右*? – WhozCraig 2014-10-18 06:34:48

+0

那麼,與文件名的更新回答了這個問題。 [見這個問題](http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file)。 – WhozCraig 2014-10-18 06:48:44

回答

1

這是因爲你實現在.cpp文件,其中時,他們需要被實例化他們不能被看作的模板的方法。一般來說,templates must be defined in a header file

爲了解決這個問題,通過移動定義爲SelectionSort.h消除您SelectionSort.cpp文件。

相關問題