2010-10-22 4 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> для размещения новых?

В противном случае эти функции выглядят правильными. Если это весь распределитель, у него есть другие недостатки, такие как отсутствие требуемых typedefs, address() и max_size(), а также шаблон rebind.


Редактировать: Единственная причина ошибки может заключаться в том,

#define T(z) zzz 

бы препроцессор заменить все T() «S он сталкивается, но оставить T S не следуют скобки.

Вы можете просто переименовать аргумент шаблона.

+0

Не удалось пропустить stddef. После включения заголовка проблема все еще существует. – Raxvan

+0

@ Raxvan: сообщение обновлено с вероятной причиной ошибки. – visitor

+0

спасибо человеку , это была проблема .... :), исправил ее, изменив T в TYPE – Raxvan

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

+1

Я сдаюсь, какая разница в вашем коде против OP? – GManNickG

+0

Я не понимаю. – Chubsdad

0

Это просто указывает на проблему, не исправляет ее. Я специализировал шаблон для всех типов POD, удаляя 'new' и '-> ~ T()' из функций конструкции и destruct. Ошибки все еще появляются в одном и том же месте.

+0

Вместо ответа здесь отредактируйте свой пост. Посты здесь отсортированы по голосам, так что вы не можете фактически ответить на это сообщение таким образом. Другой способ - прокомментировать эту запись «кто-то» (: –

Смежные вопросы