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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2010, 14:55   #1
demcy
 
Регистрация: 16.08.2010
Сообщений: 3
По умолчанию компилятор не видит заголовочный файл

Компилятор: bloodshed devcpp
написал код заголовочного файла sort.h
#include <iostream>
#include <cassert>
using namespace std;

template <class T>
inline void swap(T array[],int pos1, int pos2)
{
T temp;
temp = array[pos1];
array[pos1]=array[pos2];
array[pos2]=temp;
}

template <class T>
inline void print(T array[], int size)
{
int i;
for (i=0; i<size; ++i){
cout<<array[i]<<" ";
}
cout<<endl;

и программу использующую этот код bs.cpp
#include "sort.h"

template <class T>
inline void bubble_sort(T array[], int size)
{
int i, j;
for (i=0; i<size-1; ++i) {
for (j=size-1; j>i, --j) {
if (array[j-1]>array[j] swap(array, j-1, j);
}
}
}
int main()
{
int array_1[]={7,3,8,2,1,5,4);
print(array_1, 7);
bubble_sort(array_1, 7);
print(array_1,7);
cout<<endl;

int array_2[]={7,3,8,2,1,5,4,9,75,-5);
print(array_2, 10);
bubble_sort(array_2, 10);
print(array_2,10);
cout<<endl;

int array_3[]={1,2,3);
print(array_3, 3);
bubble_sort(array_3, 3);
print(array_3,3);
cout<<endl;

int array_4[]={7,3,8,2,1,5,4);
print(array_4, 3);
bubble_sort(array_4, 3);
print(array_4,3);
cout<<endl;

int array_5[]={7,3,8,2,1,5,4);
print(array_5, 4);
bubble_sort(array_5, 4);
print(array_5, 4);
cout<<endl;

int array_6[]={7,3,8,2,1,5,4);
print(array_6, 3);
bubble_sort(array_6, 3);
print(array_6,3);
cout<<endl;

return 0;
}

Проблемма: при компиляции последнего файла возникают ошибки.
Якобы переменные не объявлены,
мне кажется, что программа просто не использует созданый мною заголовочный файл.

КАК это исправить?
demcy вне форума Ответить с цитированием
Старый 24.08.2010, 14:58   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
#include <iostream>
#include <cassert>
using namespace std;

template <class T>
inline void swap(T array[],int pos1, int pos2)
{
T temp;
temp = array[pos1];
array[pos1]=array[pos2];
array[pos2]=temp;
}

template <class T>
inline void print(T array[], int size)
{
int i;
for (i=0; i<size; ++i){
cout<<array[i]<<" ";
}
cout<<endl;
Это заголовочный файл такой? Если да, то я что-то вообще не пойму смысла его и какие тут переменные вообще?

Цитата:
КАК это исправить?
Подучить С++
BOBAH13 вне форума Ответить с цитированием
Старый 24.08.2010, 15:00   #3
demcy
 
Регистрация: 16.08.2010
Сообщений: 3
По умолчанию

1ая ошибка: expected primary-expession before ''template''

P.S. bs содержит код пузырьковой сортировки и пример его использования,
sort.h содержит вспомогательные функции для процедур сортировки

Последний раз редактировалось demcy; 24.08.2010 в 15:04.
demcy вне форума Ответить с цитированием
Старый 24.08.2010, 15:10   #4
Kill-All-N-Thrash
Пользователь
 
Аватар для Kill-All-N-Thrash
 
Регистрация: 28.07.2010
Сообщений: 43
По умолчанию

В файл sort.h положи только прототипы шаблонов (заголовки), создай ещё sort.cpp, в котором будет реализация этих шаблонов. Потом включи sort.h в оба файла и скомпилируй вместе.

sort.h:
Код:
#ifndef SORT_H
#define SORT_H

template <class T>
inline void swap(T array[],int pos1, int pos2);

template <class T>
inline void print(T array[], int size);

#endif
sort.cpp:
Код:
#include <iostream>
#include <cassert>
#include "sort.h"
using namespace std;

template <class T>
inline void swap(T array[],int pos1, int pos2)
{
T temp;
temp = array[pos1];
array[pos1]=array[pos2];
array[pos2]=temp;
}

template <class T>
inline void print(T array[], int size)
{
int i;
for (i=0; i<size; ++i){
cout<<array[i]<<" ";
}
cout<<endl;
И в главный файл включи, если я ничего не напутал, то должно работать
Kill-All-N-Thrash вне форума Ответить с цитированием
Старый 24.08.2010, 15:36   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Нет закрывающей скобки в конце заголовочного файла
p51x вне форума Ответить с цитированием
Старый 24.08.2010, 16:18   #6
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
Сообщение от Kill-All-N-Thrash Посмотреть сообщение
В файл sort.h положи только прототипы шаблонов (заголовки), создай ещё sort.cpp, в котором будет реализация этих шаблонов. Потом включи sort.h в оба файла и скомпилируй вместе.
Для компиляции нужен сорец шаблона, конечно, стандарт предусматривает разделение шаблона на объявление и реализацию, но лишь немногие компиляторы это поддерживают оО

Ошибка вот тут :
Код:
template <class T>
inline void print(T array[], int size)
{
int i;
for (i=0; i<size; ++i){
cout<<array[i]<<" ";
}
cout<<endl;
две { и одна }
ЗЫ в заголовочных файлах писать using namespace - дурной тон.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
компилятор не видит изменения в коде DiGris Общие вопросы C/C++ 4 09.04.2010 12:39
Заголовочный файл NiCola999 Общие вопросы C/C++ 4 26.02.2010 18:29
Помогите создать заголовочный файл для Dll ifynk Общие вопросы Delphi 4 11.09.2009 17:15
заголовочный файл и файл исходного текста Роман Радер Общие вопросы C/C++ 10 21.07.2009 21:46
Преобразование заголовочный файлов в MASM Zap Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 03.05.2009 00:17