我正在编写一个C++自定义分配器以用于STL。当我把下面的代码在类定义,它编译:C++ STL内存分配器编译错误
#include "MyAlloc.hpp"
#if 1
template <typename T>
typename MyAlloc<T>::pointer
MyAlloc<T>::allocate(size_type n, MyAlloc<void>::const_pointer p) {
void *ptr = getMemory(n*sizeof(T));
typename MyAlloc<T>::pointer tptr = static_cast<MyAlloc<T>::pointer>(ptr);
return tptr;
}
#endif
但是,当我把它放在一个单独的.cpp文件,我得到以下错误。我究竟做错了什么?该错误在static_cast行。
g++ -c MyAlloc.cpp
MyAlloc.cpp: In member function ‘typename MyAlloc<T>::pointer MyAlloc<T>::allocate(size_t, const void*)’:
MyAlloc.cpp:9: error: expected type-specifier
MyAlloc.cpp:9: error: expected `>'
MyAlloc.cpp:9: error: expected `('
MyAlloc.cpp:9: error: expected `)' before ‘;’ token
make: *** [MyAlloc.o] Error 1
PT
-1。回答一个与被问到的问题不同的问题,这个问题与编译器错误有关。未能在头文件中定义模板会导致链接错误,但甚至没有尝试进行链接。 – 2010-02-03 07:09:15
不,这是一个编译器错误。编译器无法编译模板,除非在该翻译单元中定义模板。这就是头文件的作用 - 在多个实现文件中保存函数/类/变量名称。 – 2010-02-03 19:19:17
你基本上说的是一个未定义的函数调用(调用一个不存在的函数)是一个链接器错误 - 事实并非如此。 – 2010-02-03 19:20:19