shared_ptr ошибка при линковке c++

223
29 июня 2017, 03:42

pastebin.com - исходный код заголовочного файла с реализацией shared_ptr.

pastebin.com - CPP файл в котором ничего экстраординарного.

При компиляции выдает следующее: pastebin.com

Помогите пожалуйста, не могу понять где ошибки. Спасибо!

Answer 1

Во-первых, ваш компилятор знает, что такое С++11, но по умолчанию работает в до-С++11 режиме. В результате любые попытки использования свойств С++11 распознаются, но приводят к предупреждениям. Переведите компилятор в режим С++11 или выше.

Во-вторых, вы сделали лишь объявление статического члена setOfPointers, не не сделали его определения. О чем вам компилятор сказал открытым текстом ("...but no definition is available"). В С++14 и ранее определение должно делаться явно и располагаться за пределами класса. В силу "навороченности" типа setOfPointers это определение тоже будет довольно "навороченным"

template<typename T> 
std::vector< typename shared_ptr<T>::template storage<T> > shared_ptr<T>::setOfPointers;

Так как это шаблонное определение, располагаться оно должно в заголовочном файле.

(По вашему коду, однако, не ясно, зачем внутренний тип storage тоже сделан самостоятельным шаблоном со своим независимым параметром. Зачем?)

Если ваш компилятор поддерживает С++17, то вы можете избавиться от необходимости делать это определение явно, просто добавив ключевое слово inline в объявление статического члена класса

static inline std::vector< storage<T> > setOfPointers;
READ ALSO
Ограничение выбора в календарной форме

Ограничение выбора в календарной форме

Можно ли в календарной форме datepicker ограничить возможность выбора только определенным днем недели? Средствами из коробки, так сказатьВ документации...

340
Здравствуйте, как заменить input [type=submit] на button [type=submit]?

Здравствуйте, как заменить input [type=submit] на button [type=submit]?

Здравствуйте, как заменить input [type=submit] на button [type=submit] через javascript, input кнопки невидимы и обычным способом их не заменить, а требуется сделать...

391