c++ - GCC 4.2 模板奇怪的错误

标签 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
    }

};

我真的不知道如何修复这些错误。 请帮忙,

谢谢。

最佳答案

为了确保您没有遗漏必要的内容,包括:<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/

相关文章:

c++ - 模板函数中的静态对象是否有链接?

c++ - 当基类指针指向在基类中声明的派生类虚函数时,为什么会出现编译时错误?

ios - swift 默认自动释放吗?应用空闲时内存增长的原因是什么?

iOS 模拟器在启动时崩溃

iphone - Xcode 组织者 : Valid signing identity not found

templates - AWS CloudFormation Wordpress 模板。等待条件超时

c++ - 编写用于识别 void 类型的完全特化的问题

c++ - 在运行时生成c/c++程序的动态调用图

c++链表与优先队列

c++ - 将静态库链接到共享库?