C++ STL 内存分配器编译错误

标签 c++ memory stl allocator

我正在编写一个用于 STL 的 C++ 自定义分配器。当我将以下代码放入类定义中时,它会编译:

#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

最佳答案

模板必须始终在翻译单元中定义。为了使用模板功能,模板的定义需要放在头文件中,而不是单独的.cpp 文件中。

关于C++ STL 内存分配器编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2189883/

相关文章:

c++ - GUI 卡住时显示带有 QThread 的 QMessageBox

c++ - 越界访问数组不会出错,为什么?

c++ - 一遍又一遍地重新定义变量是否会增加内存?

c++ - 如何找到 2 组的交集?

c++ - 更新后如何修改exe文件中的代码

java - 当我们在 Java 中创建数组列表时,堆中的内存分配是如何形成的?

memory - Node.js 内存泄漏

c++ - 清理 RAM(也许是 win32 api)?

c++ - 这里的 UserArray 是什么意思?

c++ - 在线性时间内找出排序 vector 中是否有一对相加等于某个值