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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2008, 19:37   #1
SimaoO
Новичок
Джуниор
 
Регистрация: 12.11.2008
Сообщений: 1
Восклицание Разбиение исходника на части

Привет всем!!!У меня появилось затруднение, когда разбиваю программу по трем файлам, как ни стараюсь описание функции не переносится в 2.cpp.Вот специально написал маленькую программу, покажите на ее примере как перенести(вместе с конструктором).
___________________________________ _________________________
Код:
1.cpp
#include <iostream>
#include "funk.h"

using namespace std;

int main()
{
	list<int> s;
	int key;
	s.print(key);
	
return 0;
}
___________________________________ ____________________________
2.cpp

___________________________________ ____________________________
Код:
funk.h
#ifndef FUNK_H
#define FUNK_H

template<class X>

	class list{

	X free;
 
 public:

	 list(int sz=5){free=sz;}
	 ~list(){}

	 void print(X x){x=free;cout<<"Vivod : "<<(x);}

};
#endif

Последний раз редактировалось rpy3uH; 12.11.2008 в 20:05.
SimaoO вне форума Ответить с цитированием
Старый 13.11.2008, 20:41   #2
ShenDy
Пользователь
 
Регистрация: 25.03.2008
Сообщений: 18
По умолчанию

Точно не уверен, пусть кто-нибудь другой подправит если что, но думаю так:
___________________________________ ______
Код:
2.cpp

#include <iostream>
#include "funk.h"

using namespace std;

template<class X>list<X>::list(int sz=5){free=sz;}
template<class X>list<X>::~list(){}
template<class X>void list<X>::print(X x){x=free;cout<<"Vivod : "<<(x);}
_________________________________________
funk.h

funk.h
#ifndef FUNK_H
#define FUNK_H

template<class X>

	class list{

	X free;
 
 public:

	 list(int sz=5);
	 ~list();

	 void print(X x);

};
#endif

main, конечно, без изменения

Кстати тема должна называться не "помогите пожалуйста" , а "шаблоны"

Последний раз редактировалось rpy3uH; 14.11.2008 в 11:47.
ShenDy вне форума Ответить с цитированием
Старый 16.11.2008, 15:08   #3
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Говоря простым языком, шаблонный класс list<X> должен быть реализован в .h файле. Поэтому не надо ничего переносить в .cpp файл. Иначе компилятор просто не сможет найти реализацию шаблона, если она будет в .cpp. Причина в том, что раздельная компиляция, которая работает для обычного кода, для шаблонов не работает. Шаблон не компилируется в объектный код до тех пор, пока его кто-либо не попытается использовать. Поэтому, если ты используешь шаблон в файле 1.cpp, то где-то во включаемых в 1.cpp заголовочных файлах должна быть доступна реализация шаблона, т.е. она должна быть в твоем funk.h файле.
como вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбиение на части MAcK Общие вопросы .NET 4 18.09.2008 13:56
Надо найти код из исходника Черничный Работа с сетью в Delphi 0 20.08.2008 13:19
Разбиение дочернего окна на колонки... HunterMan Win Api 3 03.04.2008 23:19
Разбиение окна на области? HunterMan Win Api 2 03.04.2008 22:18
Разбиение матриц на макроблоки!!! metamfetamin Паскаль, Turbo Pascal, PascalABC.NET 3 02.11.2007 23:33