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

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

Войти
Регистрация
Восстановить пароль
 
KSTU
9 / 10 / 3
Регистрация: 25.04.2011
Сообщений: 47
#1

Передача массива структур - C++

08.11.2011, 22:13. Просмотров 775. Ответов 4
Метки нет (Все метки)

Имеется программа.

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
#include <iostream>
#include <iomanip>
#include <conio.h>
 
using namespace std;
 
//структура
const int maxNum = 19;
struct book
    {
        char name[10];
        char author[10];
        int year, value;
    } BookMas [maxNum] = {
        "Book01","Author1",2000,10,
        "Book02","Author1",1999,5,
        "Book03","Author2",1998,7,
        "Book04","Author2",1999,3,
        "Book05","Author1",2001,5,
        "Book06","Author3",2000,2,
        "Book07","Author3",2001,6,
        "Book08","Author2",1998,1,
        "Book09","Author1",2002,9,
        "Book10","Author3",1997,4,
    };
 
//прототипы функций
void AddBook (int *pNum);
 
//главная функция
void main ()
{
    setlocale (LC_ALL,"rus");
    int Num=9;
 
    char button;
    do
    {
        system("cls");
        cout << "Главное меню:\n1=Добавить книгу\n2=Выход\n";
        button = _getch();
        switch(button)
        {
            case '1':
                if (Num == maxNum)
                {
                    cout << "\nНельзя добавить больше элементов. Нажмите на любую клавишу.";
                    _getch();
                }
                else
                    AddBook(&Num);
                break;
    }
    while (button != '2');
}
 
//добавление книг
void AddBook (int *pNum)
{
    int plusNum = 0, newNum = 0;
    do
    {
        system("cls");
        cout << "0=Вернуться в меню\n\n";
        cout << "Введите количество новых книг: ";
        cin >> plusNum;
        if (plusNum == 0)
            return;
        newNum = *pNum + plusNum;
        if (newNum > maxNum)
        {
            cout << "\nСлишком много книг. Нажмите на любую клавишу.";
            _getch();
        }
    }
    while ((newNum > maxNum) || (plusNum < 0));
    for (int i=*pNum+1; i<=newNum; i++)
    {
        system("cls");
        cout << "Книга " << i;
        cout << "\n\nНазвание: ";
        cin >> BookMas[i].name;
        cout << "Автор: ";
        cin >> BookMas[i].author;
        cout << "Год издания: ";
        cin >> BookMas[i].year;
        cout << "Экземпляров на складе: ";
        cin >> BookMas[i].value;
    }
    cout << "\nДанные успешно добавлены! Нажмите на любую клавишу.";
    _getch();
    *pNum = newNum;
}
Но теперь нужно структуру закинуть в функцию main и оттуда указателем передать в функцию AddBook. Написал так:
C++
1
2
3
4
5
...
AddBook(&BookMas[0], &maxNum, &Num);
...
void AddBook (book *BookMas, int *maxNum, int *pNum)
...
Но компилятор ругается, в чем ошибка?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 22:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача массива структур (C++):

Передача массива структур в функцию не указывая размера массива - C++
Я читаю с командной строки файл в котором содержится массив структур. Есть библиотека с функцией в которую я прередаю файл и массив...

Передача массива структур в функцию - C++
В общем проблема с передачей массива структур в функцию... Структура описана следующим образом: struct struct_write { char Name; ...

Передача массива структур в функцию - C++
Помогите пожалуйста исправить ошибку. Массив student std должен передаваться в функции.VS 2010 ошибок не выдаёт , программа запускается,...

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

Передача динамического массива структур в функцию - C++
Доброго времени суток:) Имеется входной файл,который представлен в виде пар через запятую (010)-(110),(001)-(100),... надо загнать его...

Передача массива структур в заголовочные файлы - C++
Всем привет! Возникла проблема с использованием массива структур в многомодульной программе. Я создаю структуру и массив структур в файле...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,458
08.11.2011, 22:33 #2
KSTU, Где ругается, как ругается, на какую строчку ругается? Он же тебе все подробно говорит, а нам откуда это ведомо?
1
KSTU
9 / 10 / 3
Регистрация: 25.04.2011
Сообщений: 47
08.11.2011, 22:45  [ТС] #3
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
#include <iostream>
#include <iomanip>
#include <conio.h>
 
using namespace std;
 
//прототипы функций
void AddBook (struct book *BookMas, int *maxNum, int *pNum);
 
//главная функция
void main ()
{
        setlocale (LC_ALL,"rus");
        int Num=9;
 
        const int maxNum = 19;
        struct book
        {
                char name[10];
                char author[10];
                int year, value;
        } BookMas [maxNum] = {
                "Book01","Author1",2000,10,
                "Book02","Author1",1999,5,
                "Book03","Author2",1998,7,
                "Book04","Author2",1999,3,
                "Book05","Author1",2001,5,
                "Book06","Author3",2000,2,
                "Book07","Author3",2001,6,
                "Book08","Author2",1998,1,
                "Book09","Author1",2002,9,
                "Book10","Author3",1997,4,
        };
 
        char button;
        do
        {
                system("cls");
                cout << "Главное меню:\n1=Добавить книгу\n2=Выход\n";
                button = _getch();
                switch(button)
                {
                        case '1':
                                if (Num == maxNum)
                                {
                                        cout << "\nНельзя добавить больше элементов. Нажмите на любую клавишу.";
                                        _getch();
                                }
                                else
                                        AddBook(&BookMas[0], &maxNum, &Num);
                                break;
                 }
    }
    while (button != '2');
}
 
//добавление книг
void AddBook (struct book *BookMas, int *maxNum, int *pNum)
{
        /*
        int plusNum = 0, newNum = 0;
        do
        {
                system("cls");
                cout << "0=Вернуться в меню\n\n";
                cout << "Введите количество новых книг: ";
                cin >> plusNum;
                if (plusNum == 0)
                        return;
                newNum = *pNum + plusNum;
                if (newNum > maxNum)
                {
                        cout << "\nСлишком много книг. Нажмите на любую клавишу.";
                        _getch();
                }
        }
        while ((newNum > maxNum) || (plusNum < 0));
        for (int i=*pNum+1; i<=newNum; i++)
        {
                system("cls");
                cout << "Книга " << i;
                cout << "\n\nНазвание: ";
                cin >> BookMas[i].name;
                cout << "Автор: ";
                cin >> BookMas[i].author;
                cout << "Год издания: ";
                cin >> BookMas[i].year;
                cout << "Экземпляров на складе: ";
                cin >> BookMas[i].value;
        }
        cout << "\nДанные успешно добавлены! Нажмите на любую клавишу.";
        _getch();
        *pNum = newNum;
        */
        cout << "hello";
}
Ошибка:

...main.cpp(50) : error C2664: 'AddBook' : cannot convert parameter 1 from 'main::book *' to 'book *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
08.11.2011, 23:33 #4
Вынесите объявление структуры за main и функции void AddBook (struct book *BookMas, int *maxNum, int *pNum);
А объект структуры создайте уже в main.
2
KSTU
9 / 10 / 3
Регистрация: 25.04.2011
Сообщений: 47
08.11.2011, 23:42  [ТС] #5
Цитата Сообщение от Chelioss Посмотреть сообщение
Вынесите объявление структуры за main и функции void AddBook (struct book *BookMas, int *maxNum, int *pNum);
А объект структуры создайте уже в main.
Спасибо, теперь компилируется. :)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2011, 23:42
Привет! Вот еще темы с ответами:

Передача динамического массива структур в функцию - C++
Помогите, пожалуйста переделать. Нужно передать динамический массив. Есть такой код: #include&lt;iostream&gt; using namespace std; void...

Передача массива структур в функцию через указатель - C++
вот пример куска кода, не могу понять почему ругается на: void Add(student *ptr) { for(int i = 0; i&lt;lim; i++) { ...

Передача структур разных классов - C++
Доброго времени суток. Сложилась такая проблема: В метод одного класса нужно передать структуру другого класса. CmatrixDial.h ...

Передача указателя на массив структур в функцию - C++
Здрвствуйте! Не могу сообразить почему вылетает segmentation fault в функции, inputDate при количестве элементов в массиве &gt;2 Если есть...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.11.2011, 23:42
Ответ Создать тему
Опции темы

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