我使用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
}
};
我真的无法弄清楚如何修复错误。 请帮忙,
感谢。
答案 0 :(得分:3)
为了确保您不缺少必要的内容:<cstddef>
std::size_t
和<new>
新展示位置?
否则这些功能似乎是正确的。如果这是整个分配器,它还有其他缺陷,例如缺少必需的typedef,address()
和max_size()
方法,以及rebind
模板。
编辑:错误的唯一原因可能是您定义了函数式宏T。
#define T(z) zzz
会使预处理器替换它遇到的所有T()
,但保留T
后面没有括号。
您可以重命名模板参数。
答案 1 :(得分:0)
这个怎么样?
template <class 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
}
};
int main(){
irrProcessBufferAllocator<int> i, j;
int *p = new int;
i.construct(p, 2);
i.destruct(p);
}
答案 2 :(得分:0)
这只是指出了问题,并没有解决它。 我通过从构造和破坏函数中删除'new'和' - &gt; ~T()'来专门为所有POD类型设置模板。错误仍然出现在同一地点。