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

С++ для начинающих

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

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

06.03.2011, 14:02. Просмотров 1694. Ответов 10
Метки нет (Все метки)

Привет всем!

Решил написать программу с шаблонами. Вот 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++ Шаблон класса
C++ Шаблон класса
C++ шаблон класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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
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
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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++ Шаблон класса
C++ Шаблон класса с++
шаблон класса C++

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru