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

Многомдульные преложения - C++

Восстановить пароль Регистрация
 
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
09.05.2011, 12:00     Многомдульные преложения #1
Есть такое задание:
Любое задание из лабораторных работ оформить в виде многомодульного приложения с использованием заголовочных файлов.
Ребята, подскажите, что и как тут делать надо, последняя лабораторная осталась в семе...
Весь нет перерыл, ничего не нашел(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 12:00     Многомдульные преложения
Посмотрите здесь:

Delphi Класс + Візуальное и консольнео преложения
Windows XP Все приложения запускаются в консоли

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.05.2011, 12:07     Многомдульные преложения #2
плохо искали http://ru.wikipedia.org/wiki/Заголовочный_файл
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
09.05.2011, 13:06  [ТС]     Многомдульные преложения #3
А как обьявить структуру, чтоб она была видна во всех файлах программы?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.05.2011, 13:09     Многомдульные преложения #4
объявляете структуру в одном файле, а потом в каждом файле где нужно использовать эту структуру
подключаете через #include "*.h" файл со структурой
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
09.05.2011, 13:33  [ТС]     Многомдульные преложения #5
Создал такой заголовочный файл MARSH.h
C
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
 
#define MAX 4
struct MARSH
{
    char start_name[20];
    char finish_name[20];
    int nom_msrsh;
    int dl_msrsh;
};
 
MARSH *mass[MAX];
В файле .с обьявил #include "MARSH.h"
Выдает такие ошибки при компановке:
Linking...
init_.obj : error LNK2005: "struct MARSH * * mass" (?mass@@3PAPAUMARSH@@A) already defined in Main.obj
Debug/1.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

1.exe - 2 error(s), 0 warning(s)

Добавлено через 17 минут
Что не верно, подскажите...
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.05.2011, 13:40     Многомдульные преложения #6
Цитата Сообщение от Liv-pooL Посмотреть сообщение
MARSH *mass[MAX];
зачем объявлять переменную - массив указателей сдесь, если он у вас уже объвлен в main ?
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
09.05.2011, 14:02  [ТС]     Многомдульные преложения #7
Там я удалил его обьявление, все равно тоже выдает, и это сообщение появляется столько раз, в скольких я файлах использую эту структуру

Добавлено через 15 минут
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
#include <iostream>
using namespace std;
#define MAX 4
 
struct MARSH
{
    char start_name[20];
    char finish_name[20];
    int nom_msrsh;
    int dl_msrsh;
};
 
MARSH *mass[MAX];
void init();
int menu();
void enter();
void show();
void del();
unsigned int rpos=0, spos=0;
bool qstore(MARSH *);
MARSH *qretrieve();
ostream &operator<<(ostream &, MARSH *);
 
int main()
{
    init();
    while(true)
    {
        switch(menu())
        {
        case 1: enter(); break;
        case 2: show(); break;
        case 3: del(); break;
        case 4: return 0;
        }
    }
 
    return 0;
}
int menu()
{
    cout<<"******Menu******\n";
    cout<<"1-Dobavit' danie|2-Soderzimoe|3-Udalenie|4-Vihod\nVvod: ";
    int otvet;
    do
    {
        cin>>otvet;
    }while(otvet<1||otvet>5);
    return otvet;
}
void init()
{
    for(int i=0; i<MAX; i++)
        mass[i]=NULL;
}
void enter()
{
    int otvet;
    while(true)
    {
        cout<<"Dobavit'|0-Zakonchit' vvod\nVvod: ";
        cin>>otvet;
        if(otvet==0)
            return;
        MARSH *ob=new MARSH;
        if(!qstore(ob))
            return;
        cout<<"Vvedite nachalnii punkt : ";
        cin>>ob->start_name;
        cout<<"Vvedite konechnii punkt : ";
        cin>>ob->finish_name;
        cout<<"Vvedite nomer mershruta : ";
        cin>>ob->nom_msrsh;
        cout<<"Vvedite dlinu marshruta : ";
        cin>>ob->dl_msrsh;  
    }
}
void show()
{
    for(unsigned int i=0; i<MAX; i++)
        if(mass[i])cout<<mass[i]<<'\n';
}
void del()
{
    MARSH *p;
    if((p=qretrieve())==NULL)
        return;
    cout<<p<<endl;
    delete p;
 
}
bool qstore(MARSH *ob)
{
    if(spos+1==rpos || (spos+1==MAX && !rpos))
    {
        cout<<"Polna...\n";
        return false;
    }
    mass[spos]=new MARSH;
    mass[spos]=ob;
    if(++spos==MAX) spos = 0;
    return true;
}
MARSH *qretrieve()
{
    if(rpos==MAX) rpos = 0;
    if(rpos==spos)
    {
        cout<<"Pusta\n";    
        return NULL;
    }
    MARSH *temp=mass[rpos];
    mass[rpos++]=NULL;
    return temp;
}
 
ostream &operator<<(ostream & stream, MARSH *ob)
{
    stream<<ob->start_name<<' '<<ob->finish_name<<' '<<ob->nom_msrsh<<' '<<ob->dl_msrsh;
    return stream;
}
Вот с этого я попытался создать данное прилжение, но чем дальше я захожу, тем больше у меня проблем со стуктурой и переменными.... Никак не могу их задать, чтоб они виделись во всех модулях одинаково...
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.05.2011, 14:09     Многомдульные преложения #8
C++
1
2
3
4
5
6
7
8
9
//MARSH.h
#pragma once //работает не во всех IDE
struct MARSH
{
    char start_name[20];
    char finish_name[20];
    int nom_msrsh;
    int dl_msrsh;
};
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
//main.cpp
#include <iostream>
#include "MARSH.h"
using namespace std;
#define MAX 4
 
MARSH *mass[MAX];
 
void init();
int menu();
void enter();
void show();
void del();
unsigned int rpos=0, spos=0;
bool qstore(MARSH *);
MARSH *qretrieve();
ostream &operator<<(ostream &, MARSH *);
 
int main()
{
        init();
        while(true)
        {
                switch(menu())
                {
                case 1: enter(); break;
                case 2: show(); break;
                case 3: del(); break;
                case 4: return 0;
                }
        }
 
        return 0;
}
int menu()
{
        cout<<"******Menu******\n";
        cout<<"1-Dobavit' danie|2-Soderzimoe|3-Udalenie|4-Vihod\nVvod: ";
        int otvet;
        do
        {
                cin>>otvet;
        }while(otvet<1||otvet>5);
        return otvet;
}
void init()
{
        for(int i=0; i<MAX; i++)
                mass[i]=NULL;
}
void enter()
{
        int otvet;
        while(true)
        {
                cout<<"Dobavit'|0-Zakonchit' vvod\nVvod: ";
                cin>>otvet;
                if(otvet==0)
                        return;
                MARSH *ob=new MARSH;
                if(!qstore(ob))
                        return;
                cout<<"Vvedite nachalnii punkt : ";
                cin>>ob->start_name;
                cout<<"Vvedite konechnii punkt : ";
                cin>>ob->finish_name;
                cout<<"Vvedite nomer mershruta : ";
                cin>>ob->nom_msrsh;
                cout<<"Vvedite dlinu marshruta : ";
                cin>>ob->dl_msrsh;      
        }
}
void show()
{
        for(unsigned int i=0; i<MAX; i++)
                if(mass[i])cout<<mass[i]<<'\n';
}
void del()
{
        MARSH *p;
        if((p=qretrieve())==NULL)
                return;
        cout<<p<<endl;
        delete p;
 
}
bool qstore(MARSH *ob)
{
        if(spos+1==rpos || (spos+1==MAX && !rpos))
        {
                cout<<"Polna...\n";
            return false;
        }
        mass[spos]=new MARSH;
        mass[spos]=ob;
        if(++spos==MAX) spos = 0;
        return true;
}
MARSH *qretrieve()
{
        if(rpos==MAX) rpos = 0;
        if(rpos==spos)
        {
                cout<<"Pusta\n";        
                return NULL;
        }
        MARSH *temp=mass[rpos];
        mass[rpos++]=NULL;
        return temp;
}
 
ostream &operator<<(ostream & stream, MARSH *ob)
{
        stream<<ob->start_name<<' '<<ob->finish_name<<' '<<ob->nom_msrsh<<' '<<ob->dl_msrsh;
        return stream;
}
Добавлено через 1 минуту
если у вас есть еще модули в которых используется MARSH *mass[MAX]; то в каждом из них нужно объявить
C
1
extern MARSH *mass[MAX];
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
09.05.2011, 14:09     Многомдульные преложения #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//MARSH.h
// работает во всех ide
#if defined(_MSC_VER)
#pragma once
#endif
#if !defined(__MARSH_H__)
#define __MARSH_H__
 
struct MARSH
{
    char start_name[20];
    char finish_name[20];
    int nom_msrsh;
    int dl_msrsh;
};
 
#endif
чуток подправил.
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
09.05.2011, 14:16  [ТС]     Многомдульные преложения #10
Все, спасибо говорю всем, очень помогли, все работает))))
Yandex
Объявления
09.05.2011, 14:16     Многомдульные преложения
Ответ Создать тему
Опции темы

Текущее время: 10:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru