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

Ошибка при работе со структурой - C++

Восстановить пароль Регистрация
 
 
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 15:09     Ошибка при работе со структурой #1
Доброго времени суток!
возник очередной глупый вопрос - ЧТДН?

Объявил массив указателей на структуру, но при попытке внести в структуру данные при компиляции вылезает вот такая ошибка на каждую строку:
error: base operand of '->' has non-pointer type 'bop'

Компилятор - GCC.

В книге ответа на вопрос найти не смог. Уверен в том что так можно, ибо есть работающий код (другое "упражнение" в котором такой способ внесения данных работает без проблем.)

Заранее благодарен!


Код:
Кликните здесь для просмотра всего текста
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
struct bop{
    char FullName[80];
    char Title[80];
    char BopName[80];
    int preference; // 0- FullName, 1- Title, 2- BopName
};
 
int main()
{
    setlocale(LC_CTYPE, "");
 
    bop* Arr=new bop[3];
 
    Arr[0]->FullName="Charli Parker";
    Arr[0]->Title="God";
    Arr[0]->BopName="Frick";
    Arr[0]->preference=0;
 
    Arr[1]->FullName="John Bim";
    Arr[1]->Title="Love";
    Arr[1]->BopName="White";
    Arr[1]->preference=1;
 
    Arr[2]->FullName="Eric Pirce";
    Arr[2]->Title="Sec";
    Arr[2]->BopName="Black";
    Arr[2]->preference=2;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2013, 15:09     Ошибка при работе со структурой
Посмотрите здесь:

Ошибка при работе с графикой C++
Ошибка при работе с файлом C++
Ошибка при работе с портами. C++
C++ Ошибка при работе с массивом
Ошибка при работе с графикс.аш C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.09.2013, 15:13     Ошибка при работе со структурой #2
оператор -> применяется только к указателям. К самим объектам следует применять точку.

Добавлено через 1 минуту
Цитата Сообщение от h_wolf Посмотреть сообщение
Объявил массив указателей на структуру
нет, ты объявил массив структур. Точнее указатель, указывающий на массив структур.
Элементы же массива это сами структуры, а не какие-то указатели, к которым можно применить ->
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 15:13  [ТС]     Ошибка при работе со структурой #3
Kuzia domovenok, тогда ругается на несоотвествие типов:

error: incompatible types in assignment of 'const char [14]' to 'char [80]'
Hugra
 Аватар для Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
03.09.2013, 15:16     Ошибка при работе со структурой #4
Цитата Сообщение от h_wolf Посмотреть сообщение
Kuzia domovenok, тогда ругается на несоотвествие типов:

error: incompatible types in assignment of 'const char [14]' to 'char [80]'
Замени на string и не "парся", или используй strcpy()
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 15:18  [ТС]     Ошибка при работе со структурой #5
Цитата Сообщение от Hugra Посмотреть сообщение
Замени на string и не "парся", или используй strcpy()
Пробовал -

error: incompatible types in assignment of 'const char [14]' to 'std::string [80] {aka std::basic_string<char> [80]}'
Rogov
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 15:18     Ошибка при работе со структурой #6
тут 2 варианта, либо в структуре строки обьявить коснт)))

либо почитай про функцию копирования strcpy.
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 15:20  [ТС]     Ошибка при работе со структурой #7
Цитата Сообщение от Rogov Посмотреть сообщение
тут 2 варианта, либо в структуре строки обьявить коснт)))

либо почитай про функцию копирования strcpy.
Можно более подробнее, я не очень понимаю.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.09.2013, 15:21     Ошибка при работе со структурой #8
strcpy однозначно!

Добавлено через 41 секунду
Цитата Сообщение от h_wolf Посмотреть сообщение
Можно более подробнее, я не очень понимаю.
http://www.cplusplus.com/reference/cstring/strcpy/
А = использовать нельзя.
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 15:24  [ТС]     Ошибка при работе со структурой #9
Последний вопрос остается в силе, а вто замена char на string помогла. (Протупил, забыл потереть [] в объявлении структуры)

Добавлено через 1 минуту
Kuzia domovenok, Rogov,

C++
1
strcpy(Arr[0].FullName, "Charli Parker")
Так?
Rogov
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 15:28     Ошибка при работе со структурой #10
да. у тебя не работает?
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 15:31  [ТС]     Ошибка при работе со структурой #11
Rogov, со string работает, с strcpy нет, пока ковыряюсь. Доделаю с char+strcpy - выложу сюда полное задание и работающий код.
Rogov
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 15:42     Ошибка при работе со структурой #12
h_wolf, на что ругается??
<string.h> подключен?
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 15:51  [ТС]     Ошибка при работе со структурой #13
В общем это очередное упражнение из учебника С. Прата "С++ Лекции и упражнения"
Выложу полное решение, вдруг кому пригодится.

Задача:
Кликните здесь для просмотра всего текста
написать программу, которая может выводить списки членов по реальным именам, должностям, секретным именам, либо по предпочтению самого члена. В основу положите структуру:

C++
1
2
3
4
5
6
struct bop{
    string FullName;
    string Title;
    string BopName;
    int preference; // 0- FullName, 1- Title, 2- BopName
};
В этой программе создайте небольшой массив структур и инициализируйте его соответствующими значениями. Пусть программа запустит цикл, который даст возможность пользователю выбирать разные альтернативы:
a. display by name
b. display by title
c. display by bopname
d. display by preference
q. exit

обратите внимание на то, что "by preference" означает что нужно отобразить параметр соответствующий указанному значению prefernce.


Код с применением string:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
 
using namespace std;
 
//int StrSize=80; осталось после попыток с char
 
struct bop{
    string FullName;
    string Title;
    string BopName;
    int preference; // 0- FullName, 1- Title, 2- BopName
};
 
int main()
{
    setlocale(LC_CTYPE, "");
 
    bop* Arr=new bop[3];
 
    Arr[0].FullName="Charli Parker";
    Arr[0].Title="God";
    Arr[0].BopName="Frick";
    Arr[0].preference=0;
 
    Arr[1].FullName="John Bim";
    Arr[1].Title="Love";
    Arr[1].BopName="White";
    Arr[1].preference=1;
 
    Arr[2].FullName="Eric Pirce";
    Arr[2].Title="Sec";
    Arr[2].BopName="Black";
    Arr[2].preference=2;
 
    cout<<"Выберите способ отобрадения:"<<endl;
    cout<<"a) Отобразить имена\t\tb) Отобразить титул"<<endl;
    cout<<"c) отобразить имя БОП\t\td) Отобразить по предпочтинию"<<endl;
    char Sw;
    while(Sw!='q'){
 
    cin>>Sw;
 
    switch(Sw)
    {
    case 'a':
        for(int i=0; i<3; i++)
            cout<<Arr[i].FullName<<endl;
        break;
    case 'b':
        for(int i=0; i<3; i++)
            cout<<Arr[i].Title<<endl;
        break;
    case 'c':
        for(int i=0; i<3; i++)
            cout<<Arr[i].BopName<<endl;
        break;
    case 'd':
        for(int i=0; i<3; i++){
            if(Arr[i].preference==0)
                cout<<Arr[i].FullName<<endl;
            else if(Arr[i].preference==1)
                    cout<<Arr[i].Title<<endl;
            else cout<<Arr[i].BopName<<endl;
        }
        break;
    }
    }
    cout<<"Bye\n";
 
    delete [] Arr;
 
    return 0;
}


С радостью выслушаю все замечания по данному творению.

А вот с массивом char увы запустить это дело не удалось через strcpy:

error: invalid conversion from 'char' to 'char*' [-fpermissive]
error: initializing argument 1 of 'char* strcpy(char*, const char*)' [-fpermissive]

Пока пытаюсь нагуглить ответ.

Добавлено через 1 минуту
Rogov,
error: invalid conversion from 'char' to 'char*' [-fpermissive]
error: initializing argument 1 of 'char* strcpy(char*, const char*)' [-fpermissive]

подключен cstring, он описывает strcpy.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
03.09.2013, 15:53     Ошибка при работе со структурой #14
Цитата Сообщение от h_wolf Посмотреть сообщение
error: invalid conversion from 'char' to 'char*' [-fpermissive]
тут вы где то точно намудрили, надо участок кода с этой ошибкой
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 15:54  [ТС]     Ошибка при работе со структурой #15
Raali,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <cstring>
 
 
using namespace std;
 
int StrSize=80;
 
struct bop{
    char FullName;
    char Title;
    char BopName;
    int preference; // 0- FullName, 1- Title, 2- BopName
};
 
int main()
{
    setlocale(LC_CTYPE, "");
 
    bop* Arr=new bop[3];
 
    strcpy(Arr[0].FullName,"Charli Parker"); // ошибка тут
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
03.09.2013, 15:55     Ошибка при работе со структурой #16
Цитата Сообщение от h_wolf Посмотреть сообщение
char FullName;
ну вот это у вас для имени один char, а нужен массив для стоки, например char fullName[64]; ...- в данном случае 64 символа на имя
Rogov
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 15:57     Ошибка при работе со структурой #17
C++
1
2
3
 char FullName;
    char Title;
    char BopName;
на самом деле ошибка тут.
Размер чара укажите и все будет ок
eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 161
03.09.2013, 16:00     Ошибка при работе со структурой #18
весь листинг в студию!
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
03.09.2013, 16:02  [ТС]     Ошибка при работе со структурой #19
Rogov, Raali, я -балбес! конечно! Забыл вернуть размер после изменения на string!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2013, 16:04     Ошибка при работе со структурой
Еще ссылки по теме:

Ошибка при работе со строками C++
Ошибка при работе с файлами C++
C++ Ошибка при работе со структурами

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

Или воспользуйтесь поиском по форуму:
eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 161
03.09.2013, 16:04     Ошибка при работе со структурой #20
C++
1
2
3
4
5
6
struct bop{
    char FullName[MAX_PATH];
    char Title[MAX_PATH];
    char BopName[MAX_PATH];
    int preference; // 0- FullName, 1- Title, 2- BopName
};
Yandex
Объявления
03.09.2013, 16:04     Ошибка при работе со структурой
Ответ Создать тему
Опции темы

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