Название: STL шаблон Ошибка С2019 Отправлено: Hrundel от Декабрь 14, 2013, 00:20 Всем привет,
Наконец-то приступил к изучению шаблонов. Решил написать первый опус. Цель такая: Код
Просто и элегантно! Написал вот так: Заголовок: Код
Ресурс: Код
Дальше пытаюсь использовать: Код
Компилятор пишет: Цитировать mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: bool __thiscall Loop<class QString>::isStoped(void)" (?isStoped@?$Loop@VQString@@@@QAE_NXZ) referenced in function "public: __thiscall MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QAE@PAVQWidget@@@Z) Не понимаю причину. Почему нет доступа линкера? Название: Re: STL шаблон Ошибка С2019 Отправлено: kambala от Декабрь 14, 2013, 00:58 реализации шаблонов должны находиться в заголовочном файле.
Цитировать Просто и элегантно! особенно в виду отсутствия пробелов :)Название: Re: STL шаблон Ошибка С2019 Отправлено: Old от Декабрь 14, 2013, 04:42 В таком виде stopped никогда не станет true.
Название: Re: STL шаблон Ошибка С2019 Отправлено: Igors от Декабрь 14, 2013, 10:11 Код
Ресурс: Если имеется ввиду cpp файл, то да, не слинкует. При "инстанциировании" тела template должны быть видимы, поэтому их обычно пишут в h файле - или включают .cpp файл в .h файл. Часто говорят "должны быть в той же единице трансляции".Название: Re: STL шаблон Ошибка С2019 Отправлено: VPS от Декабрь 14, 2013, 17:38 Если не учитывать логику работы Вашего кода, то добавлю ещё, что вместо двух методов
Код: T query(QVector<T> incomming, int i); Название: Re: STL шаблон Ошибка С2019 Отправлено: _Bers от Декабрь 14, 2013, 21:37 1. Тела функций шаблонов должны быть определены там же, где и объявлены (в хэдерах)
2. Код: template<typename T> 3. Код: template<typename T> 4. В качестве типа, определяющего количество используется int. Признак неграмотности. Используйте size_t ---- Хотя это спорный момент. Ибо используется он в качестве typedef QVector::size_type Лучше сразу использовать QVector::size_type для индексов, ибо если верить документации, он в куте как раз таки int |