2010-10-22 76 views
1

我有以下代碼與GCC 4.2/XCode編譯。GCC 4.2模板奇怪的錯誤

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

只是爲了確保您不會缺少必要的包括:<cstddef>std::size_t<new>爲安置新?

否則這些函數看起來是正確的。如果這是整個分配器,它還有其他缺陷,如缺少必需的typedef,address()max_size()方法,以及rebind模板。


編輯:錯誤的唯一原因可能是你有一個函數式宏定義。

#define T(z) zzz 

將使預處理器替換所有T()的遇到,但離開T不是後面括號。

您可以重命名模板參數。

+0

stddef沒有丟失,在包含頭後問題依然存在 – Raxvan 2010-10-22 08:57:22

+0

@Raxvan:發佈更新了錯誤的可能原因 – visitor 2010-10-22 09:09:26

+0

謝謝,這是問題.... :),通過改變類型 – Raxvan 2010-10-22 09:12:41

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); 
} 
+0

我知道這可能是問題,但XCode並沒有告訴我使用模板的女巫的類型。此外,這是用了很多,我不能刪除這個分配器了,我只需要找到一個修復。 – Raxvan 2010-10-22 08:34:00

+1

我放棄了,你的代碼和OP的區別是什麼? – GManNickG 2010-10-22 08:42:49

+0

我不明白。 – Chubsdad 2010-10-22 08:43:39

0

這只是指出了問題,並沒有解決它。 我通過從構造和破壞函數中刪除'new'和' - >〜T()',爲所有POD類型專門設計了模板。錯誤仍然出現在同一個地方。

+0

請不要在這裏回答,請編輯你的帖子。這裏的帖子按票數排序,所以你不能用這種方式實際回答某人的帖子。另一種方式是評論這個「某人」的帖子(: – 2010-10-22 09:12:30