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

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

Войти
Регистрация
Восстановить пароль
 
Vincent_FFVII
1 / 1 / 0
Регистрация: 12.05.2013
Сообщений: 6
#1

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

12.05.2013, 02:49. Просмотров 351. Ответов 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

объясните в чем ошибка или как правильно разбить на файлы код?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2013, 02:49     Ошибка при разбиении программы на файлы(модули)
Посмотрите здесь:

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

Найти максимальное и минимальное число правого и левого треугольника при разбиении матрицы - C++
Нужно найти максимальное и минимальное число правого и левого треугольника при разбиении матрицы. Как через for работать только с этими...

Ошибка после завершения программы. Двоичные файлы. Структуры - C++
Программа работает нормально по записи в двоичный файл и считывании с него, но одна проблема появляется в конце после завершения программы....

Модули и текстовые файлы - C++
Необходимо разработать программу, обеспечивающую обработку текстового файла. Программа после запуска выводит на экран заставку (с описанием...

Модули программы - C++
Привет! Недавно начал изучать си++, и у меня возник такой вопрос: как разместить класс или функцию в отдельном модуле.

модули программы - C++
Всем привет помогите пожалуйста с этим плиз заранее спасибо

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
12.05.2013, 03:10     Ошибка при разбиении программы на файлы(модули) #2
Если не ошибаюсь, то у Вас дважды определена функция Empty
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
12.05.2013, 05:44     Ошибка при разбиении программы на файлы(модули) #3
Цитата Сообщение от 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;
Vincent_FFVII
1 / 1 / 0
Регистрация: 12.05.2013
Сообщений: 6
12.05.2013, 16:56  [ТС]     Ошибка при разбиении программы на файлы(модули) #4
т.е. Вы предлагаете не включать Struct.h в empty.cpp ?
yol
10 / 10 / 0
Регистрация: 13.10.2012
Сообщений: 155
12.05.2013, 17:05     Ошибка при разбиении программы на файлы(модули) #5
попробуй в "func1.h", включить строку: #include "struct.h";
а в "func1.cpp" - строку: #include "func1.h";
и в "main.cpp" - строку: #include "func1.h".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2013, 17:10     Ошибка при разбиении программы на файлы(модули)
Еще ссылки по теме:

Разбиение программы на модули! - C++
Есть большая программа #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class mes // AbstractProductA { public: ...

Ошибка при работе программы - C++
Здравствуйте! У меня такая проблема, вылетает программа. Она работает, компилируется, данные вводятся, но когда я перехожу к выводу перечня...

Ошибка при завершении программы - C++
Добрый вечер! Помогите плиз, у меня после завершения программы она зависает... Методом тыка) определил что после завершения проги,...

Ошибка при запуске программы - C++
Приветствую) Есть код программы, который, по идее, должен запускаться и работать без особых проблем, но почему-то ругается на всё подряд....

Ошибка при выполнения программы - C++
Всех с наступившем НОВЫМ ГОДОМ!!! У меня возникла ошибка при выполнение программы вот код: #include &lt;iostream&gt; #include...

Ошибка при запуске программы - C++
помогите исправить, программа компилируется, но выдаёт ошибку #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
12.05.2013, 17:10     Ошибка при разбиении программы на файлы(модули) #6
Цитата Сообщение от Vincent_FFVII Посмотреть сообщение
т.е. Вы предлагаете не включать Struct.h в empty.cpp ?
я предлагаю почитать про раздельную компиляцию, компоновку и т.д.
Yandex
Объявления
12.05.2013, 17:10     Ошибка при разбиении программы на файлы(модули)
Ответ Создать тему
Опции темы

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