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

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

Восстановить пароль Регистрация
 
KSTU
9 / 10 / 3
Регистрация: 25.04.2011
Сообщений: 47
08.11.2011, 22:13     Передача массива структур #1
Имеется программа.

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)
...
Но компилятор ругается, в чем ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
14004 / 8835 / 1234
Регистрация: 24.12.2010
Сообщений: 16,014
08.11.2011, 22:33     Передача массива структур #2
KSTU, Где ругается, как ругается, на какую строчку ругается? Он же тебе все подробно говорит, а нам откуда это ведомо?
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
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
08.11.2011, 23:33     Передача массива структур #4
Вынесите объявление структуры за main и функции void AddBook (struct book *BookMas, int *maxNum, int *pNum);
А объект структуры создайте уже в main.
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.
Спасибо, теперь компилируется. :)
Yandex
Объявления
08.11.2011, 23:42     Передача массива структур
Ответ Создать тему
Опции темы

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