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

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

Войти
Регистрация
Восстановить пароль
 
 
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
#1

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

03.09.2013, 15:09. Просмотров 891. Ответов 20
Метки нет (Все метки)

Доброго времени суток!
возник очередной глупый вопрос - ЧТДН?

Объявил массив указателей на структуру, но при попытке внести в структуру данные при компиляции вылезает вот такая ошибка на каждую строку:
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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2013, 15:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при работе со структурой (C++):

Ошибка при работе со структурой - C++
#include <iostream.h> #include <conio.h> #pragma argsused float v; struct GOODS { unsigned quantity; float price;}; ...

Не могу найти ошибку в работе со структурой студентов - C++
не могу найти ошибку. помогите! #include <stdio.h> #include <io.h> #include <math.h> #include <iostream.h> #include <conio.h> ...

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы - C++
В VS скомпилировал код #include <iostream> using namespace std; int main() { int a; cout<<"Hallo"; cin>>a; cout<<a; ...

В работе необходимо организовать однонапрямлений список структурой с именем AEROFLOT, что содержит следующие поля: - C++
помогите переделать задачу. вот условие. В работе необходимо организовать однонапрямлений список структурой с именем AEROFLOT,...

Ошибка при работе с очередью - C++
#include "stdafx.h" #include <iostream> using namespace std; struct link{ int data; link* next; };

Ошибка при работе с портами - C++
Следующ.кусок кода определяет нажата клавиша Esc или F8. После компиляции при запуске проги и при нажатии F8 вызывается функция printf...

20
Kuzia domovenok
1947 / 1800 / 137
Регистрация: 25.03.2012
Сообщений: 6,234
Записей в блоге: 1
03.09.2013, 15:13 #2
оператор -> применяется только к указателям. К самим объектам следует применять точку.

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

error: incompatible types in assignment of 'const char [14]' to 'char [80]'
0
Hugra
48 / 48 / 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()
1
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
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]}'
0
Rogov
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 15:18 #6
тут 2 варианта, либо в структуре строки обьявить коснт)))

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

либо почитай про функцию копирования strcpy.
Можно более подробнее, я не очень понимаю.
0
Kuzia domovenok
1947 / 1800 / 137
Регистрация: 25.03.2012
Сообщений: 6,234
Записей в блоге: 1
03.09.2013, 15:21 #8
strcpy однозначно!

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

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

C++
1
strcpy(Arr[0].FullName, "Charli Parker")
Так?
0
Rogov
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 15:28 #10
да. у тебя не работает?
0
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
03.09.2013, 15:31  [ТС] #11
Rogov, со string работает, с strcpy нет, пока ковыряюсь. Доделаю с char+strcpy - выложу сюда полное задание и работающий код.
0
Rogov
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 15:42 #12
h_wolf, на что ругается??
<string.h> подключен?
0
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
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.
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,068
Завершенные тесты: 1
03.09.2013, 15:53 #14
Цитата Сообщение от h_wolf Посмотреть сообщение
error: invalid conversion from 'char' to 'char*' [-fpermissive]
тут вы где то точно намудрили, надо участок кода с этой ошибкой
0
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
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"); // ошибка тут
0
03.09.2013, 15:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2013, 15:54
Привет! Вот еще темы с ответами:

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

Ошибка при работе с мютексом - C++
Пытаюсь написать класс защищенный стек, но получаю ошибку при работе с мютексом: error C2248: std::mutex::mutex: невозможно обратиться к...

Ошибка при работе с файлами - C++
Необходимо, создать текстовый файл со случайным именем в диапазоне 8 символов, латиница. Вот код: int main() { ...

ошибка при работе со стуктурами - C++
Возникает проблема при передаче структурных переменных в ф-цию Например: void showdatabase(struct Company *a,int i) { cin&gt;&gt;a.salary; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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