Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сборка программы, Проблема с исходными файлами 
V
    Опции темы
Maka6er
  Дата 10.1.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 27.2.2007
Где: Киев

Репутация: 1
Всего: 3



Есть исходные файлы:

list.h
Код

#ifndef LIST_H
#define LIST_H


template <class _T> 
struct node {
    _T el;
    struct node *link;

    node(void):link(NULL) { }
    ~node(void) { }
};

template <class _T> 
class list {
public:
    list(void):count(0) { _begin = NULL; }
    ~list(void) {}
    void add(const _T &);    
private:
    unsigned int count;                                
    node<_T> *_begin;                                
    void add(const _T &,node<_T> **);                
};


#endif


list.cpp
Код

#include "list.h"


template <class _T>
void list<_T>::add(const _T &arg, node<_T> **n) {    
    if(!(*n)) {
        node<_T> *p = new node<_T>();
        p->el = arg;
        *n = p;
    } else {
        add(arg,&((*n)->link));
    }
}

template <class _T>
void list<_T>::add(const _T &arg) {
    count++;
    add(arg,&_begin);
}



main.cpp
Код

#include <iostream>

#include "list.h"

int main(int argc, char* argv[]) {

    list<char> L;

    L.add('a');

    system("PAUSE");
    return EXIT_SUCCESS;
}



При компиляции выдает ошибку:

Error    1    error LNK2019: unresolved external symbol "public: void __thiscall list<char>::add(char const &)" (?add@?$list@D@@QAEXABD@Z) referenced in function _main    main.obj    

Если все собрать в одном файле или убрать шаблоны и сделать элементы класа типа char то все нормально.
Подскажите где ошибка?
PM MAIL   Вверх
bsa
Дата 10.1.2008, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



методы шаблонных классов должны определяться в заголовочном файле. Проще говоря, содержимое list.cpp необходимо поместить в list.h
PM   Вверх
Maka6er
Дата 10.1.2008, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 27.2.2007
Где: Киев

Репутация: 1
Всего: 3



Как тогда быть с тем что принято что бы интерфейс был в *.h, а реализация в *.cpp? Некрасиво получается. Или в случае шаблонных классов такое допускается? 
PM MAIL   Вверх
Fazil6
Дата 10.1.2008, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 7
Всего: 60



Цитата(Maka6er @  10.1.2008,  00:01 Найти цитируемый пост)
Или в случае шаблонных классов такое допускается? 

для шаблонов - это обязательное требование
PM MAIL   Вверх
Maka6er
Дата 10.1.2008, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 27.2.2007
Где: Киев

Репутация: 1
Всего: 3



Буду знать. Спасибо за помощь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0912 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.