Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шаблоны / 25 сообщений из 25, страница 1 из 1
16.05.2007, 12:23
    #34528792
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
Здравствуйте.
В проекте 2 файла. Главный и реализация класса List (описано в list.h)
Почему при компиляции list.cpp не генерируется код для шаблонов?
ИДЕ явно показывает что кода 0 байт.
Естественно MAKE выдает ошибку....
...
Рейтинг: 0 / 0
16.05.2007, 12:26
    #34528813
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
xdfЗдравствуйте.
В проекте 2 файла. Главный и реализация класса List (описано в list.h)
Почему при компиляции list.cpp не генерируется код для шаблонов?
ИДЕ явно показывает что кода 0 байт.
Естественно MAKE выдает ошибку....

Код будет генериться, если шаблоны будут использоваться. При компиляции файла list.cpp они не используются.

Шаблоны введены для того, чтобы из некого правила построить функцию. Это правило имеет параметры - типы. Так как в list.cpp эти правила не используются, то и функции (классы) не генерятся. Было бы странно, если бы эти функции (классы) генерились не зная, для каких параметров (типов) их строить.
...
Рейтинг: 0 / 0
16.05.2007, 12:43
    #34528914
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
Дак я их использую в главном файле.....

Если я вс понял то нужно использовать шаблоны
в том же модуле где код шаблонных функций?

А как же идея модульного программирования?
...
Рейтинг: 0 / 0
16.05.2007, 12:52
    #34528944
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
xdfДак я их использую в главном файле.....

Если я вс понял то нужно использовать шаблоны
в том же модуле где код шаблонных функций?

А как же идея модульного программирования?

Нужно писать реализацию в заголовочном файле
...
Рейтинг: 0 / 0
16.05.2007, 13:08
    #34529002
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
Кх...ясно...

некрасиво както....
...
Рейтинг: 0 / 0
16.05.2007, 13:54
    #34529179
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
еще интереснее...

написал реализацию в заголовке, а он мне все равно linker error...

???
...
Рейтинг: 0 / 0
16.05.2007, 14:09
    #34529240
Шаблоны
написал реализацию в заголовке, а он мне все равно linker error...

1) приведите пример кода, а то отсюда не видно нихрена..
2) под каким компайлером работаете?
...
Рейтинг: 0 / 0
17.05.2007, 12:38
    #34532069
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
// File LIST.h

#ifndef _list_h
#define _list_h
template <class T> ListItem
{
public:
T item;
ListItem<T> *next;
ListItem<T> *prev;
};

template <class T> List
{
ListItem<T> curr;
ListItem<T> last;
ListItem<T> items;
public:
List() { curr=last=items=0; };
void Add (T item) { /* code for add */ };
T& operator()() { if (items) return curr->item; };
~List() {};
};

#endif

// File list_ex.cpp

#include <list.h>

int main(void)
{
List<int> int_list;
int_list.Add(4); int_list.Add(5);
int h = int_list();
};

// linker error
...
Рейтинг: 0 / 0
17.05.2007, 12:49
    #34532132
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
в классе List там где члены описаны стоят *, торопился..ошибся
...
Рейтинг: 0 / 0
17.05.2007, 12:49
    #34532133
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
Вообще не понятно как компилятор пропустил
// File LIST.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
#ifndef _list_h
#define _list_h
template <class T> ListItem
{
 public:
  T item;
 ListItem<T> *next;
 ListItem<T> *prev;
};

template <class T> List
{
 ListItem<T> curr; // указатель??? 
 ListItem<T> last;
 ListItem<T> items;
public:
  List() { curr=last=items= 0 ; };
 void Add (T item) { /* code for add */ }; ..тоже показывай
 T& operator()() { if (items) return curr->item; }; // интересно а вернет ежели пустой
  ~List() {};
};

#endif

// File list_ex.cpp

#include <list.h>

int main(void)
{
 List<int> int_list;
 int_list.Add( 4 ); int_list.Add( 5 );
 int h = int_list();
};
...
Рейтинг: 0 / 0
17.05.2007, 12:52
    #34532159
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
там звездочки стоят....торопился ошибся...

не суть что в Add() (хоть пусто ) и вернет ли operator()... главное почему linker error... ???
компилируется ведь нормально...врать не буду
...
Рейтинг: 0 / 0
17.05.2007, 13:04
    #34532218
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
использую Borland C++ 3.1

когда не шаблонные классы то порядок....
пробовал
#pragma option -Jgd если это могло помочь, но не помогло....

linker error...
undefined symbol in module list_ex: list::list()
undefined symbol in module list_ex: list::add()
undefined symbol in module list_ex: list::operator()
undefined symbol in module list_ex: list::~list()
...
Рейтинг: 0 / 0
17.05.2007, 13:08
    #34532237
Шаблоны
использую Borland C++ 3.1

а может пора переходить на современные компиляторы, более-менее соответствующие текущему стандарту языка?

чем мозг парить себе и окружающим
...
Рейтинг: 0 / 0
17.05.2007, 13:23
    #34532302
Шаблоны
ах да, обратите внимание на то что вы инклудите:

Код: plaintext
1.
2.
// File list_ex.cpp
#include <list.h>

скорей всего включается одноименный системный хедер, а нужен локальный:

Код: plaintext
1.
#include "list.h"
...
Рейтинг: 0 / 0
17.05.2007, 13:25
    #34532320
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
самый простой ответ
...
Рейтинг: 0 / 0
17.05.2007, 13:31
    #34532354
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
смех , это к постеру о компиляторе...

а в BC 3.1 нет list.h в исходниках....смотрел, так что с этим все нормально должно быть
...
Рейтинг: 0 / 0
17.05.2007, 13:33
    #34532362
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
ладно, если вам неохота морочится, от VC все работает...
вопрос уже к борланду получается..... просто становится интересно... а если кто то под ДОС прогает шаблоны....
...
Рейтинг: 0 / 0
17.05.2007, 13:40
    #34532393
Шаблоны
а в BC 3.1 нет list.h в исходниках....смотрел, так что с этим все нормально должно быть

есть, см. bc31\CLASSLIB\INCLUDE\

а пример скомпилился, правда с ожидаемыми ворнингами
...
Рейтинг: 0 / 0
17.05.2007, 13:53
    #34532451
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
в теме указано что не линкуется....
...
Рейтинг: 0 / 0
17.05.2007, 14:00
    #34532488
Шаблоны
в теме указано что не линкуется....

что с чем линкуете?
я этот пример под дебагом прогнал, все OK
...
Рейтинг: 0 / 0
17.05.2007, 14:02
    #34532499
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
жму Alt_C / Link
или Make
...
Рейтинг: 0 / 0
17.05.2007, 14:04
    #34532510
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
может вышлете мне ваш BC :)
...
Рейтинг: 0 / 0
17.05.2007, 14:16
    #34532584
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
xdfв теме указано что не линкуется....

шаблоны должны истанцироваться в модуль, который их использует. Что вы пытаетесь линковать?
...
Рейтинг: 0 / 0
17.05.2007, 14:30
    #34532650
Шаблоны
может вышлете мне ваш BC :)

*с сомнением*
5,5Mb в архиве на мыло? ну можно попытаться..
...
Рейтинг: 0 / 0
17.05.2007, 14:38
    #34532696
xdf
xdf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблоны
а строчки #include "list.h" не достаточно?
если нет, то почему?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шаблоны / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]