crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> template, linux, qt, Особенность использования шаблонов
fantom
  опции профиля:
сообщение 5.2.2009, 19:18
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 29.1.2009
Пользователь №: 515

Спасибо сказали: 1 раз(а)




Репутация:   1  


Пишу простенький пример
test.h
template<typename T>
class Test{
public:
Test();
};


test.cpp

#include "test.h"
template <typename T>
Test<T>::Test()
{

}

main.cpp
int main(int argc, char *argv[]){
QApplication app(argc, argv);
    Test<int> test;
return app.exec();
}


Вываливается ошибка main.cpp:112: undefined reference to `Test<int>::Test()'
Причем если я убираю cpp файл, а описываю реализацию методов в h файле все нормально.
В чем дело?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 5.2.2009, 19:35
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Почитай литературу. Объяснять долго. Но суть в том, что должен быть *.inl, *.h, *.cpp файлы. К Qt отношения это не имеет. Это либо к общим вопросам C++, либо к компиляторам!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fantom
  опции профиля:
сообщение 6.2.2009, 11:47
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 29.1.2009
Пользователь №: 515

Спасибо сказали: 1 раз(а)




Репутация:   1  


Да действительно вопрос по сути не по qt..Но я приложение с использованием qt пишу, заодно хотелось узнать тонкости работы шаблонов и qt классов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.2.2009, 11:54
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


fantom, у Qt есть грабля с шаблонами см. Academic Solutions to Academic Problems
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 6.2.2009, 11:56
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(fantom @ 6.2.2009, 11:47) *
Да действительно вопрос по сути не по qt..Но я приложение с использованием qt пишу, заодно хотелось узнать тонкости работы шаблонов и qt классов.

Будет вопрос по qt, зададите в этом разделе. А эту тему лучше перенести! :) Но вопрос хороший. Поищите в интернете, уверен, что найдете очень много подсказок. Просто это действительно долго объяснять как делается, да я уже и не помню!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fantom
  опции профиля:
сообщение 6.2.2009, 13:17
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 29.1.2009
Пользователь №: 515

Спасибо сказали: 1 раз(а)




Репутация:   1  


А эта проблема впринципе решается? Или мне всю реализацию шаблонных классов в h файле описывать?

Сам отвечаю на свой вопрос. Нашел в другом форуме.Решение называется external template. К сожалению, эта часть стандарта не реализована С++ большинством компиляторов, по этому так писать не принято. Полное описание проблемы и её решения на английском языке Вы можете прочесть тут - http://www.codeguru.com/forum/showthread.php?t=250284

Видимо придется писать все в h файле.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 8.2.2009, 14:43
Сообщение #7


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


просто у компиляторов С++ есть такая особенность - нельзя выносить реализацию шаблонов в .cpp-файлы

Сообщение отредактировал void* - 8.2.2009, 14:45
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.10.2024, 18:00