我的編譯器編譯器錯誤給了我這個錯誤,我不明白爲什麼。與模板成員函數
`P3_A2.o: In function `allocateAlot(_sync*)':
/home/***/workspace_qnx/P3_A2/P3_A2.cpp:69: undefined reference to `int*
StaticMem::allocate<int>(int*)'`
這裏是P3_A2.cpp
:
void allocateAlot(sem_t * sleepHere)
{
for (int i = 0; i < 10000; i++)
{
Int32 * t = StaticMem::allocate(t);
}
sem_wait(sleepHere);
}
這裏的StaticMem.h
:
類StaticMem
{
...
template <class T> static T * allocate(T * ptr);
}
這裏的StaticMem.cpp
:
template <class T>
T * StaticMem::allocate(T * ptr)
{
ptr = (T*) reserveContiguousMemory(sizeof(T));
return ptr;
}
有人能解釋其中這個錯誤來自哪裏?
模板函數必須在* header *文件中定義。定義必須在使用它的任何地方都可見。不要嘗試在'.cpp'文件中定義模板函數(除非這是您使用這些函數的唯一文件)。 – AnT