Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 12.05.2013
Сообщений: 6

Ошибка при разбиении программы на файлы(модули)

12.05.2013, 02:49. Показов 1198. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Исходный код:

Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <conio.h>
 
using namespace std;
 
struct LIST
{
    int info;
    LIST *next;
};
 
LIST *head,*Prev;
 
void Initial()
{
    LIST *first = NULL;
    int k;
    ifstream fi ("in.txt");
    while(!fi.eof())
    {
        fi>>k;
        head = new LIST;
        head->info = k;
        head->next = first;
        first = head;
        //cout << head->info;
        //head = head->next;
    }
 
    fi.close();
    cout<<endl;
}
 
int Empty()
{
    if (head->next==NULL)
    return 1;
    else
    return 0;
}
 
LIST *Search(int num)
{
    Prev=head;
    LIST *tmp=head->next;
    while(tmp!=NULL && tmp->info!=num)
    {
        Prev=tmp;
        tmp=tmp->next;
    }
 
return tmp;
 
}
 
void Show()
{
 
    LIST *tmp=head->next;
    ofstream fo ("out.txt");
    cout << endl << "Список : ";
    fo << "Новый список : ";
    while(tmp!=NULL)
    {
        cout << tmp->info << " ";
        fo << tmp->info << " ";
        tmp=tmp->next;
    }
    fo.close();
    cout << endl;
}
 
int AddBefore(int num, int point)
{
    LIST *current=Search(point);
 
    if (current!=NULL)
    {
        LIST *tmp= new LIST;
        Prev->next=tmp;
        tmp->next=current;
        tmp->info=num;
        return 1;
    }
 
return 0;
 
}
 
void DelAll()
{
    LIST *tmp;
    while(head->next!=NULL)
    {
        tmp=head;
        head=head->next;
        delete tmp;
    }
    cout << endl <<"Список удален !"<<endl;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    //cout << endl <<"Элементы списка : ";
    Initial();
    Empty();
    if (Empty()==1)
    {
        cout << endl << "Список пуст" << endl;
        return 0;
    }
    else
    Show();
 
    int num, point;
    cout << endl << "Введите элемент = ";
    cin >> num;
    Search (num);
    AddBefore(num,point);
    cout<< endl << "Перед каким элементом добавить = ";
    cin >> point;
    if (AddBefore(num,point)==1)
    cout << endl << "Элемент добавлен в список" << endl;
    else
    cout << endl << "Такого элемента не существует" << endl;
 
    //else
    Show();
    cout << endl << "Для удаления списка нажмите Enter\n";
    getch();
    DelAll();
    Show();
    cout<<endl;
 
}


Например, при создании модуля функции "Empty" :

.cpp-файл для Empty:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <conio.h>
#include "func1.h"
#include "Struct.h"
 
using namespace std;
 
int Empty()
{
    if (head->next==NULL)
    return 1;
    else
    return 0;
}


.h-файл для Empty:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
#ifndef EMPTY_H
#define EMPTY_H
int Empty();
#endif


.h-файл для структуры
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef STRCT_H
#define STRCT_H
 
struct LIST
{
    int info;
    LIST *next;
};
 
LIST *head,*Prev;
 
#endif


в результате получается,что struct LIST *head уже определен в func1.obj

объясните в чем ошибка или как правильно разбить на файлы код?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2013, 02:49
Ответы с готовыми решениями:

При разбиении программы на *.cpp, *.h - файлы программа не компилируется
Если собрать всё в zadacha.cpp, то всё хорошо компилируется. Но если разбить на файлы - ошибка компилятора. В чём проблема? ...

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

Ошибка при разбиении на страницы
Если я пишу запрос таким образом, то разбиение на страницы нельзя осуществить? Set...

5
 Аватар для Пёс
229 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
12.05.2013, 03:10
Если не ошибаюсь, то у Вас дважды определена функция Empty
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,028
Записей в блоге: 1
12.05.2013, 05:44
Цитата Сообщение от Vincent_FFVII Посмотреть сообщение
объясните в чем ошибка
в том, что указатели head и Prev, определенные в заголовке struct.h, проходят компиляцию в составе empty.cpp, т.к. этот файл туда включается.
Так же в main.cpp у Вас определены указатели с такими же именами:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <conio.h>
 
using namespace std;
 
struct LIST
{
    int info;
    LIST *next;
};
 
LIST *head,*Prev;
1
1 / 1 / 0
Регистрация: 12.05.2013
Сообщений: 6
12.05.2013, 16:56  [ТС]
т.е. Вы предлагаете не включать Struct.h в empty.cpp ?
0
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163
12.05.2013, 17:05
попробуй в "func1.h", включить строку: #include "struct.h";
а в "func1.cpp" - строку: #include "func1.h";
и в "main.cpp" - строку: #include "func1.h".
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,028
Записей в блоге: 1
12.05.2013, 17:10
Цитата Сообщение от Vincent_FFVII Посмотреть сообщение
т.е. Вы предлагаете не включать Struct.h в empty.cpp ?
я предлагаю почитать про раздельную компиляцию, компоновку и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2013, 17:10
Помогаю со студенческими работами здесь

Ошибка при разбиении строк
Помоги пожалуйста не могу понять в чем конкретно ошибка string si = &quot;Один,Два,Три, Строка для разбора&quot;; const char...

Ошибка при разбиении Acronis'ом : как восстановить данные?
Компу примерно 5 лет. Загрузился с LiveCD и начал Acronis'ом создавать диск &quot;D&quot;. Он по окончанию работы выдал что-то типа &quot;операции...

Ошибка при разбиении текста на символы (на вход данные из Excel)
Пишу макрос для заполнения документа и для заполнения полей, разбитых на клетки, решил провести посимвольное заполнение. Но при...

Предупреждение "Эти файлы нельзя открыть.... " при запуске программы через "найти программы и файлы"
Доброго времени суток! Вылазит надпись &quot;Эти файлы нельзя открыть. параметры безопасности интернет не позволили открыть один или...

Модули и метод простой итерации - ошибка при компиляции
Здравствуйте. В программе по теме модульного программирования выходит ошибка при компиляции второго модуля &quot;error3: unknown...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru