GCC 4.2模板奇怪的错误

时间:2010-10-22 08:24:51

标签: c++ xcode templates gcc

我使用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
    }

};

我真的无法弄清楚如何修复错误。 请帮忙,

感谢。

3 个答案:

答案 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类型设置模板。错误仍然出现在同一地点。