Название: работа с шаблонным классом Отправлено: altai от Октябрь 03, 2010, 14:45 Подскажите пожалуйста, где у меня ошибка или решение для следующей ситуции:
Hello, I've some problem with using templates: myclass.h Код: #ifndef MYCLASS_H myclass.cpp Код: #include "myclass.h" в слоте на клик на форме: Код: myclass<QString> *vr = new myclass<QString>(); получаю ошибку: /home/user/test/mainwindow.cpp:30: error: undefined reference to `myclass<QString>::login(QString, QString)' :: error: collect2: ld returned 1 exit status Подскажите пожалуйста, в чем ошибка? правильно ли объявлен класс? Правильно ли создается его экземпляр? В общем, интересует вся критика и помощь в решении этой ошибки. Название: Re: работа с шаблонным классом Отправлено: Igors от Октябрь 03, 2010, 16:52 Подскажите пожалуйста, в чем ошибка? правильно ли объявлен класс? Правильно ли создается его экземпляр? В общем, интересует вся критика и помощь в решении этой ошибки. "Тело" template ф-ции должно быть "в той же единице транслятора". Если Вы перенесете его из myclass.cpp в myclass.h, то линкер его найдет. Я обычно собираю тела template в еще одном h файле (напр. myclass_template.h) и в конце myclass.h пишу #include "myclass_template.h". А то myclass.h получается очень замусоренным (на мой вкус).А также: Код: template <class S> class myclass Код
Код: void login(S login, S pass); Код Или по месту Название: Re: работа с шаблонным классом Отправлено: m_ax от Октябрь 03, 2010, 17:16 Цитировать "Тело" template ф-ции должно быть "в той же единице транслятора". Если Вы перенесете его из myclass.cpp в myclass.h, то линкер его найдет. Я обычно собираю тела template в еще одном h файле (напр. myclass_template.h) и в конце myclass.h пишу #include "myclass_template.h". А то myclass.h получается очень замусоренным (на мой вкус). Неправда)ошибка здесь: Код
а надо так: Код Ну и конечно, лучше по константной ссылке передавать значения. Название: Re: работа с шаблонным классом Отправлено: altai от Октябрь 03, 2010, 17:30 Спасибо за ответы, думал это решается через пространство имен, буду разбираться.
Я обычно собираю тела template в еще одном h файле (напр. myclass_template.h) и в конце myclass.h пишу #include "myclass_template.h". А то myclass.h получается очень замусоренным (на мой вкус). разве использование хеадера с прототипами функций не ускоряет работу компилятора?Название: Re: работа с шаблонным классом Отправлено: Igors от Октябрь 03, 2010, 18:15 разве использование хеадера с прототипами функций не ускоряет работу компилятора? С темплейтами выбора нет - Вы не сможете позвать темплейт из cpp файла если тело находится в др. cpp файле (др. единице трансляции). Неправда) "Не вся правда" - просто Вы еще одну ошибку нашли :) |