繁体   English   中英

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

[英]C++ STL Memory Allocator Compile Error

我正在编写用于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文件中。

您需要在MyAlloc<T>::pointer前面放置typename 因为MyAlloc<T>的类型取决于T ,所以编译器不知道pointer是typedef还是成员变量或函数。 如果您不写typename ,那么编译器将采用后者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM