我使用 GCC 4.2/XCode 编译了以下代码。
template <typename T>
class irrProcessBufferAllocator
{
public:
T* allocate(size_t cnt)
{
return allocProcessBufferOfType<T>(cnt);
}
void deallocate(T* ptr)
{
if (ptr)
{
releaseProcessBuffer(ptr);
}
}
void construct(T* ptr, const T& e)
{
new ((void*)ptr) T(e);//"error: expected type-specifier before 'e' " and
//error: expected `;' before 'e'
}
void destruct(T* ptr)
{
ptr->~T();//error: expected class-name before ';' token
}
};
我真的不知道如何修复这些错误。 请帮忙,
谢谢。
最佳答案
为了确保您没有遗漏必要的内容,包括:<cstddef>
对于 std::size_t
和 <new>
放置新的?
否则这些函数看起来是正确的。如果那是整个分配器,它还有其他缺陷,例如缺少必需的 typedef,address()
和 max_size()
方法,以及 rebind
模板。
编辑:错误的唯一原因可能是您定义了函数式宏 T。
#define T(z) zzz
将使预处理器替换所有T()
它遇到了,但留下了T
后面没有括号。
您可以重命名模板参数。
关于c++ - GCC 4.2 模板奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3995060/