Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 13:53   #1
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию Шаблонные функции в классе

Доброго времени суток уважаемые эксперты. Может кто-нибудь мне объяснит, почему не проходит такая фишка:
Код:
class Test
{
public:
    Test();
    template <class T> void SetData(QVector<T> data);      
};
template <class T> void Test::SetData(QVector<T> data)
{
    cout<<data.count();
}
Все прекрасно компилируется до тех пор, пока я не вызываю такую функцию в программе.
Код:
/home/impuls/NeuroNet/main.cpp:57: undefined reference to `void Test::SetData<short>(QVector<short>)'
:-1: error: collect2: ld returned 1 exit status
Библиотеки Qt, но, думаю, тоже самое будет и с STL. Заранее спасибо.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 17.09.2010, 14:06   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

у меня все нормально

Код:
#include <iostream>
#include <vector>

using namespace std;

class Test {
public:
	Test()
	{

	}

    template <class T> void SetData(const vector<T> &data);
};

template <class T> void Test::SetData(const vector<T> &data)
{
	cout << data.size() << endl;
}

int main()
{
	Test t;
	vector<int> v;
	t.SetData(v);
	return 0;
}
объявляешь метод надеюсь там же, где и объявлен класс? не в отдельном спп?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 19.09.2010, 23:56   #3
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Опачки. В отдельном спп-шнике. Описал в хэдэре и все заработало нормально. А можно осведомиться почему нельзя описать в отдельном файле, ведь это относится только к шаблонным классам? И почему компилятор не выдает ошибку, если я не вызываю эту функцию в программе?
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 20.09.2010, 00:14   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ограничение С++ такое(это относится к любым проявлениям шаблонов как я понял)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2010, 09:04   #5
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Ну спасибо за помощь и разъяснения.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 20.09.2010, 09:04   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Impuls1989 Посмотреть сообщение
А можно осведомиться почему нельзя описать в отдельном файле, ведь это относится только к шаблонным классам?
Особенности шаблонов. Без указания параметров нельзя собрать реализацию. В общем нельзя и точка. Особенности компиляции.
Цитата:
Сообщение от Impuls1989 Посмотреть сообщение
И почему компилятор не выдает ошибку, если я не вызываю эту функцию в программе?
Не вызываете => компилятор не ищет реализацию => ему безразлично наличие таковой. Опишите любую функцию в классе, но не используйте и не реализуйте её. Всё будет компилировать и работать.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ex7_16.cpp. Непонятные функции в ссылочном классе ilya_t Visual C++ 3 23.08.2010 21:10
вложенные шаблонные классы pproger Общие вопросы C/C++ 6 07.08.2010 21:20
Почему нельзя разбивать на отдельные файлы шаблонные функции и классы? lordius Visual C++ 22 08.07.2010 09:49
Удаление в классе! Telec Помощь студентам 1 30.04.2010 18:43
шаблонные строковые функции MrKarapuz Общие вопросы C/C++ 7 09.11.2009 15:07