Форум программистов, компьютерный форум CyberForum.ru

Шаблон класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
fom4ik
49 / 7 / 1
Регистрация: 07.11.2010
Сообщений: 52
06.03.2011, 14:02     Шаблон класса #1
Привет всем!

Решил написать программу с шаблонами. Вот 3 файла:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//tree.h
 
#pragma once
 
template <class T> 
    class tree
{
 
public:
    T * begin;
    tree();//конструктор
    ~tree(){}//деструктор
};
C++
1
2
3
4
5
6
7
8
9
//tree.cpp
 
#include "tree.h"
 
template <class T>
    tree<T>:: tree()//конструктор
{
    begin = 0;
}
C++
1
2
3
4
5
6
7
8
9
//main.cpp
 
#include "tree.h"
 
int main()
{
  tree <int> A;
 
}
Компилировал XCode и Qt в обоих выдает одну ошибку:

ld: symbol(s) not found
collect2: ld returned 1 exit status


Помогите понять в чем тут дело!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2011, 14:02     Шаблон класса
Посмотрите здесь:

C++ Шаблон класса.
Шаблон класса C++
Шаблон класса C++
Шаблон класса (параметризация класса) C++
Шаблон класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.03.2011, 14:37     Шаблон класса #2
fom4ik, Весь шаблонный класс вместе с определениями надо описать в заголовочном файле (tree.h) ибо нет экспорта шаблонов.
fom4ik
49 / 7 / 1
Регистрация: 07.11.2010
Сообщений: 52
06.03.2011, 14:46  [ТС]     Шаблон класса #3
ForEveR, дело в том, что я писал шаблон класса список год назад. И делал это как здесь в 3-х файлах. После этого ничего подоного я не писал и что там было не помню
Saiberg
 Аватар для Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 15:39     Шаблон класса #4
тоже данный вопрос интересен.

струструп пишет, что нужно делать сл. образом:


C++
1
2
3
4
5
6
//template.h
#pragma once
 
#include <vector>
 
template<class T> void PrintAll(std::vector<T>& forPrint);
C++
1
2
3
4
5
6
7
8
9
10
11
12
//template.cpp
#include "Template.h"
 
export template<class T> void PrintAll(std::vector<T>& forPrint)
{
    for(std::vector<T>::iterator i = forPrint.begin();
        i != forPrint.end();
        i++)
    {
        std::cout << *i << std::endl;
    }
}
но чет не работает = \
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.03.2011, 16:03     Шаблон класса #5
export нереализован в большинстве компиляторов. С++0x вроде как предоставит экспорт шаблонов. А пока пишите в заголовочных файлах весь шаблонный класс.
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
06.03.2011, 16:18     Шаблон класса #6
Цитата Сообщение от fom4ik Посмотреть сообщение
ForEveR, дело в том, что я писал шаблон класса список год назад. И делал это как здесь в 3-х файлах. После этого ничего подоного я не писал и что там было не помню
Каким компилятором пользовались?
fom4ik
49 / 7 / 1
Регистрация: 07.11.2010
Сообщений: 52
06.03.2011, 17:19  [ТС]     Шаблон класса #7
VS 2007(или полее поздняя версия)

Добавлено через 4 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
export нереализован в большинстве компиляторов. С++0x вроде как предоставит экспорт шаблонов. А пока пишите в заголовочных файлах весь шаблонный класс.
Но если убрать template, то есть написать тоже самое, но не шаблонное то все работает!
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.03.2011, 18:10     Шаблон класса #8
fom4ik, это потому что отсутствует экспорт шаблонов, вам же сказали. Если класс не шаблонный, то экспорт, естественно, будет работать.
fom4ik
49 / 7 / 1
Регистрация: 07.11.2010
Сообщений: 52
06.03.2011, 18:13  [ТС]     Шаблон класса #9
Спасибо
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
06.03.2011, 20:13     Шаблон класса #10
Цитата Сообщение от fom4ik Посмотреть сообщение
VS 2007
В Китае брали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2011, 20:28     Шаблон класса
Еще ссылки по теме:

C++ Создать шаблон некоторого класса, возможно, реализованного с применением некоторого серверного класса
Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон C++
Шаблон класса, параметром которого должны являться наследники определённого класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.03.2011, 20:28     Шаблон класса #11
Цитата Сообщение от fom4ik Посмотреть сообщение
Но если убрать template, то есть написать тоже самое, но не шаблонное то все работает!
это связано с тем, что для обычных типов описание в заголовочном файле полностью определяет тип
для шаблонных это не так - тип появляется только после развертки шаблона, поэтому в шаблонах в общем случае описание неотделимо от реализации
Yandex
Объявления
06.03.2011, 20:28     Шаблон класса
Ответ Создать тему
Опции темы

Текущее время: 01:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru