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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
#1

Разделение программы на файлы - C++

29.01.2013, 16:00. Просмотров 2138. Ответов 21
Метки нет (Все метки)

Всем привет. Изучаю алгоритмы сортировки. Вот что уже написал:

C++
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//sort.cpp
 
#include "sort.h"
 
template <class T>
void SelectSort(T list[], int size)
{
    int minPtr;
 
    for(int i = 0; i < size - 1; i++)
    {
        //ищем минимимальный элемент в списке list[i + 1, ... , size - 1]
        minPtr = i + 1;
        for(int j = minPtr + 1; j < size; j++)
            if(list[j] < list[minPtr])
                minPtr = j;
 
        //меняем местами найденный элемент и list[i] (если требуется)
        if(list[minPtr] < list[i])
            swap(list[minPtr], list[i]);
    }
}
 
template <class T>
void InsertSort(T list[], int size)
{
    int location;
    T newElement;
 
    for(int i = 1; i < size; i++){
        newElement = list[i];
        location = i - 1;
 
        //поиск места для вставки нового элемента
        while((location >= 0) && (list[location] > newElement)){
            list[location + 1] = list[location];
            location--;
        }
 
        //место найдено, вставляем новый элемент
        list[location + 1] = newElement;
    }
}
 
template <class T>
void BubbleSort(T list[], int size)
{
    for(int pass = 1; pass <= size - 1; pass++)
        for(int elem = 0; elem < size - pass ; elem++)
            if(list[elem] > list[elem + 1])
                swap(list[elem], list[elem + 1]);
}
 
template <class T>
void BubbleSortFast(T list[], int size)
{
    bool swapped = true;
 
    for(int i = 1; swapped && (i <= size-1); i++){
        swapped = false;
 
        for(int j = 0; j < size - i; j++)
            if(list[j] > list[j + 1]){
                swap(list[j], list[j + 1]);
                swapped = true;
            }
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   //sort.h
#include <iostream>
using namespace std;
 
//сортировка выбором
template <class T>
void SelectSort(T list[], int size);
 
//сортировка вставками
template <class T>
void InsertSort(T list[], int size);
 
//сортировка пузырьком
template <class T>
void BubbleSort(T list[], int size);
 
//модифицированная сортировка пузырьком
template <class T>
void BubbleSortFast(T list[], int size);

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  //main.cpp
#include "sort.h"
 
int main(void){
    const int SIZE = 11;
    int list[SIZE] = {1,45,123,5,2,034,6,23,4,56,2};
 
    ::BubbleSortFast(list, SIZE);
    for(int i = 0; i < SIZE; i++)
        cout << list[i] << ' ';
    cout << endl;
 
    return 0;
}
Выскакивает ошибка, которая на фото. Если весь код засовываю в один файл main.cpp, тогда всё работает. Как вы считаете в чём может быть дело???
0
Миниатюры
Разделение программы на файлы  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2013, 16:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разделение программы на файлы (C++):

Разделение на файлы - C++
Может кто-то объяснить как разделять код на файлы? (я так понял нужно создать заглавный файл ****.h , создать файл с таким же именем с...

Разделение на файлы - C++
Здравствуйте, друзья! не подскажите почему у меня ругается, когда прогу делю на файлы. Вот куски: main.cpp /* * File: main.cpp...

Разделение кода на cpp и h файлы - C++
Добрый день. Расскажите, пожалуйста, как разделить код на два файла cpp и файл h. #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

Поясните ошибку (разделение класса на файлы) - C++
выношу реализацию в отдельный файл, но как только пытаюсь создать в функции объект класса, получаю ошибку: fatal error LNK1120: 1...

Разделение чередующихся строчек в разные файлы - C++
Условие: Файл с исходными данными содержит 2 стихотворения разных авторов (строки чередуются). Составить программу, которая запишет...

Вложенный шаблонный класс(разделение на файлы) - C++
Есть шаблонный класс для примера A&lt;T&gt; , в него вложен класс B&lt;T&gt; template&lt;class T&gt; class A { public: template&lt;class T&gt; ...

21
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
31.01.2013, 18:52 #16
Toshkarik, если нельзя, значит не будем, только почему в книге пишут что можно, или это просто выворот такой, который в последствии может стать минингитом?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
31.01.2013, 18:54 #17
The_bolT, так тоже нельзя делать.

Добавлено через 48 секунд
Alexxx7, где это пишут?
0
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
31.01.2013, 18:54 #18
стр.327 "С++ для професионалов" А.Скотлер, Скотт Дж.Клепер?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
31.01.2013, 19:28 #19
Alexxx7, я эту книгу не читал. Но думаю авторы имели ввиду, что можно так инклудить хоть .txt файл, главное чтоб он не являлся отдельной единицей трансляции, содержащей определение нешаблонных функций/классов. Все дело в удобстве.
0
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
31.01.2013, 19:33 #20
Toshkarik, Значит можно?
0
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
31.01.2013, 19:36 #21
Alexxx7, нет, нельзя! Сам не знаю почему, но мне не раз говорили, что НЕЛЬЗЯ подключать .cpp файлы, ни в коем случае!
Процитирую одного человека:
Потому что существует такое понятие "раздельная компиляция". Компилятор может генерировать из СРР файла промежуточный код, совершенно не волнуясь, что в коде недостаточно некоторых переменных и функций.

Непосредственным выполнением директивы #include (грубо говоря копипастингом одного файла в другой) занимается не компилятор, а препроцессор, да. Но если попытаться использовать эту директиву, окажется, что в проекте продублированы некоторые функции.

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

Таким образом, компилятор генерирует промежуточный файл, в котором все функции грамотно вызываются по своему адресу, а вот по какому именно адресу позже разберётся не компилятор, а линкер. При этом одно из достоинств раздельной компиляции то, что при добавлении в проект нового кода(или изменении какого-то срр-файла) остальные файлы не требуется перекомпилировать. К тому же, в программу помимо скомпилированных cpp файлов могут быть включены сторонние библиотеки функций. (файлы с расширением .lib) Все эти куски кода собираются линкером в один exe файл. Он и разбирает, куда ведёт вызов какой функции, и если ты неправильно их объявил или забыл объявить, то выдаёт "Linker error". При этом синтаксис программы был абсолютно грамотный, поэтому компилятор их спокойно прожевал и отдал линкеру.
1
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
31.01.2013, 19:49 #22
Alexxx7, повторюсь: если это не отдельная единица трансляции, то хоть arry.jpg инклудьте.
1
31.01.2013, 19:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2013, 19:49
Привет! Вот еще темы с ответами:

Разделение программы - C++
Добрый день! Написал программу. Код получился очень длинный. Как разделить её на части? Например, чтобы какая-нибудь функция была...

Разделение интерфейса программы - C++
Добрый день. У меня такая проблема: Мне нужно разделить следующую программу на интерфейсы ( на раздельные файлы): pair.h fraction.h ...

Разделение проекта на файлы .cpp где полностью описывается один класс - C++
Всем привет! Бьюсь над задачей: есть несколько классов, куча объявленных констант через #define и отдельные функции. Захотел все это...

Разделение программы на интерфейс и реализацию - C++
Добрый вечер! Проблема в следующем: Компилятор visual studio 2010. есть программа, в которой создан 1 класс (данные о пользователях) ...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

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