2013-08-16 3 views
-1

Попытка достичь следующих в C++ 11shared_ptr класса шаблона с помощью GCC 4.6

template< class A > 
    class B{ 
     std::shared_ptr<A> a_shared_ptr; 
    }; 

B<int> b; 

Возможно ли это?

Получение следующие ошибки

../../src/threading/node.h:26: ошибка: ISO C++ запрещает декларации 'shared_ptr' без каких-либо типа ../../src/threading /node.h:26: ошибка: недопустимое использование '::' ../../src/threading/node.h:26: ошибка: ожидается ';' перед '<' токен

+5

Конечно, почему бы ему не быть? –

+2

Вы пробовали * компилировать * это? (после добавления полуколоны в конце закрытия B)? – WhozCraig

+2

В C11? Нет, определенно нет. У него нет шаблонов и классов. –

ответ

5

Просто включите заголовок для std :: shared_ptr, он точно компилируется:

#include <memory> 

template< class A > 
class B{ 
    std::shared_ptr<A> a_shared_ptr; 
}; 

int main() 
{ 
    B<int> b; 
    return 0; 
} 
6

Да, это возможно.

Как std::shared_ptr - это новая функция C++ 11, вы должны включить поддержку C++ 11 в своем компиляторе. В GCC, опция: -std=c++0x или -std=gnu++0x.

Если я не включаю эти функции, я получаю точно такие же ошибки, как и вы.

Другой пункт: Не забудьте включить заголовок std::shared_ptr:

#include <memory> 
Смежные вопросы