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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
#1

Присвоение значений элементам вложенной структуры - C++

29.11.2011, 10:25. Просмотров 2638. Ответов 14
Метки нет (Все метки)

Необходимо присвоить значение элементам массива структур
C++
1
2
3
4
5
6
7
8
struct message {
    unsigned char code;
    unsigned short length;
    struct body {
        unsigned char id;
        char* str;
        };
    } Message[6];
Как присвоить значения элементам основной структуры понятно
C++
1
2
Message[1].code= 0xC0;
Message[1].length = 1;
А как присвоить значения элементам вложенной структуры?

Присвоение в таком виде
C++
1
Message[1] = {{0xC0, 1}, 0xA1};
выдает следующие ошибки
H:\U1_Server\U1_Server.cpp(143) : error C2059: syntax error : '{'
H:\U1_Server\U1_Server.cpp(143) : error C2143: syntax error : missing ';' before '{'
H:\U1_Server\U1_Server.cpp(143) : error C2143: syntax error : missing ';' before '}'
H:\U1_Server\U1_Server.cpp(143) : error C2143: syntax error : missing ';' before ','


Объясните, пожалуйста, как правильно сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 10:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Присвоение значений элементам вложенной структуры (C++):

Присвоение значений всем элементам массива - C++
Как присвоить значение всем элементам массива наиболее простым способом думал что double massiv={1}; присваивает...

Присвоение значений элементам двумерного динамического массива - C++
Я недавно начал программировать на языке С++, поэтому, естественно, многого не понимаю :( Вот создал я (пытался) двумерный динамический...

Как перегрузить операцию = для присваивания элементам структуры внутри класса значений? - C++
Помогите, если не затруднительно. Столкнулся с проблемой, когда пытался присвоить в конструкторе значения элементам структуры, которая...

Final для вложенной структуры - C++
class A{ class B {..} final; }; так класс B теперь входит в размер A, но не инициализируется. это баг? потому что я нигде не нашел...

Друзья шаблонного класса. Использование вложенной в класс структуры - C++
Всем привет! Изучаю книгу "Прата С. - Язык программирования С++. Лекции и упражнения". Разобрал тему шаблоны классов и в заданиях для...

структура в структуре: есть ли доступ к объектам вложенной структуры из объекта первой? - C++
Доброго времени суток! Есть структура в структуре: struct Time struct Time

14
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.11.2011, 10:54 #2
у тебя вложенная структура объявлена, но не объявлено поле, которое будет иметь тип этой структуры
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include  <iostream>
 
struct foo
{
    char c;
    struct bar
    {
    int j;
    } b;
};
 
int main()
{
    foo f = {'a', {4}};
 
    std::cout << f.c << " " << f.b.j << std::endl;
}
1
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
29.11.2011, 11:13  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
struct message {
    unsigned char code;
    unsigned short length;
    struct body {
        unsigned char id;
        char* str;
        } Body; 
} Message [6]; 
 
Message [1] = {0xC0, 0x00, {0xA1}};
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.11.2011, 11:32 #4
Heidel, индексация массивов в С/С++ начинается с нуля
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
29.11.2011, 11:37  [ТС] #5
Не получается все равно.
Если вынести кусок кода в отдельную программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main ()
{
    struct message {
    unsigned char code;
    unsigned short length;
    struct body {
        unsigned char id;
        char* str;
        } Body; 
    } Message [6]; 
 
    Message [0] = {0xC0, 0x00, {0xA1}};
 
return 0;
}
выдаст ошибки

Compiling...
11.cpp
H:\Ëàáû Ñ++\11\11.cpp(12) : error C2059: syntax error : '{'
H:\Ëàáû Ñ++\11\11.cpp(12) : error C2143: syntax error : missing ';' before '{'
H:\Ëàáû Ñ++\11\11.cpp(12) : error C2059: syntax error : '{'
H:\Ëàáû Ñ++\11\11.cpp(12) : warning C4508: 'main' : function should return a value; 'void' return type assumed
H:\Ëàáû Ñ++\11\11.cpp(14) : error C2143: syntax error : missing ';' before 'return'
H:\Ëàáû Ñ++\11\11.cpp(15) : error C2143: syntax error : missing ';' before '}'
H:\Ëàáû Ñ++\11\11.cpp(15) : error C2143: syntax error : missing ';' before '}'
H:\Ëàáû Ñ++\11\11.cpp(15) : error C2143: syntax error : missing ';' before '}'
Error executing cl.exe.

11.obj - 7 error(s), 1 warning(s)
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.11.2011, 11:46 #6
УМВР:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include  <iostream>
 
int main()
{
    struct foo
    {
    char c;
    struct bar
    {
        int j;
        char* pch;
    } b;
    };
    
    foo f[1];
    f[0] = {'a', {4}};
 
    std::cout << f[0].c << " " << f[0].b.j << std::endl;
}
и да, вместо магических чисел лучше использовать именованные константы
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
29.11.2011, 12:56  [ТС] #7
Nameless One, твоя программа в строке
C++
1
f[0] = {'a', {4}};
выдает ровно те же ошибки что и моя:

H:\Ëàáû Ñ++\11\11.cpp(36) : error C2059: syntax error : '{'
H:\Ëàáû Ñ++\11\11.cpp(36) : error C2143: syntax error : missing ';' before '{'
H:\Ëàáû Ñ++\11\11.cpp(36) : error C2059: syntax error : '{'
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.11.2011, 13:00 #8
Heidel, значит, твой компилятор не поддерживает новый стандарт
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
29.11.2011, 13:15  [ТС] #9
Nameless One, у меня и в Microsoft Visual C++, и в С++ Builder 6 при компляции ошибка в этой строке, больше мне её попробовать откомпилировать не в чем. Подскажи, как должно быть написано в таком случае, чтобы успешно откомпилировалось?
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.11.2011, 13:44 #10
C++
1
2
3
Message[0].code = 0xC0;
Message[0].length = 0x00;
Message[0].body.id = 0xA1;
и все это завернуть в какую-нибудь функцию. Или лучше воспользоваться классами, и не мучаться (пишешь ведь в С++)
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
29.11.2011, 15:11  [ТС] #11
Nameless One, понятно, спасибо. я просто думала, есть еще какой-то способ, кроме как присваивать значение каждому полю структуры.
0
Сыроежка
Заблокирован
29.11.2011, 15:19 #12
Цитата Сообщение от Heidel Посмотреть сообщение
Не получается все равно.
Если вынести кусок кода в отдельную программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main ()
{
    struct message {
    unsigned char code;
    unsigned short length;
    struct body {
        unsigned char id;
        char* str;
        } Body; 
    } Message [6]; 
 
    Message [0] = {0xC0, 0x00, {0xA1}};
 
return 0;
}
выдаст ошибки

Compiling...
11.cpp
H:\Ëàáû Ñ++\11\11.cpp(12) : error C2059: syntax error : '{'
H:\Ëàáû Ñ++\11\11.cpp(12) : error C2143: syntax error : missing ';' before '{'
H:\Ëàáû Ñ++\11\11.cpp(12) : error C2059: syntax error : '{'
H:\Ëàáû Ñ++\11\11.cpp(12) : warning C4508: 'main' : function should return a value; 'void' return type assumed
H:\Ëàáû Ñ++\11\11.cpp(14) : error C2143: syntax error : missing ';' before 'return'
H:\Ëàáû Ñ++\11\11.cpp(15) : error C2143: syntax error : missing ';' before '}'
H:\Ëàáû Ñ++\11\11.cpp(15) : error C2143: syntax error : missing ';' before '}'
H:\Ëàáû Ñ++\11\11.cpp(15) : error C2143: syntax error : missing ';' before '}'
Error executing cl.exe.

11.obj - 7 error(s), 1 warning(s)
Массив можно инициаизировать при его объявление. Поэтому вам следует объединить ваших два предложения в одно

C++
1
2
3
4
5
6
7
8
    struct message {
    unsigned char code;
    unsigned short length;
    struct body {
        unsigned char id;
        char* str;
        } Body; 
    } Message [6] = { { 0xC0, 0x00, { 0xA1 } } };
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
29.11.2011, 15:24  [ТС] #13
Сыроежка, Message [6] - это массив из 6 структур типа message, и в приведенном куске кода я присваивала значения полям только одной структуры массива, а нужно всем 6-и.
0
Bers
Заблокирован
29.11.2011, 15:31 #14
Heidel, может что-то типа такого?

(правда, на мой взгляд слишком заудренно)

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
struct message 
{
    unsigned char code;
    unsigned short length;
    
    struct body 
    {
        unsigned char id;
        char* str;
        body(){}
        body(const unsigned char nId, char*nStr): id(nId), str(nStr){}
        body(const body& rhs): id(rhs.id), str(rhs.str){}
                        
    } m_body;
 
    message(){}
    message(const unsigned char nCode, const unsigned short nLength, const body& rhs):
                                                                          code(nCode), length(nLength), m_body(rhs){}
    
} ;
 
 
int main()
{
    message mess[3];
    mess[0]= message(10,10, message::body(10,"556") );
     
    return 0;
}
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct message {
    unsigned char code;
    unsigned short length;
    struct body {
        unsigned char id;
        char* str;
    } Body; 
} Message [3] = {    { 0xC0, 0x00, { 0xA1 } } ,
                     { 0xC0, 0x00, { 0xA1 } },
                     { 0xC0, 0x00, { 0xA1 } }     }; 
 
//правда, это лишь инициализация
//а не присваивание.
//присваивать так массиву уже не получится
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
29.11.2011, 15:43  [ТС] #15
Bers, да, можно было как во втором варианте кода объявить массив структур, и сразу присвоить значения полям каждого элемента массива.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2011, 15:43
Привет! Вот еще темы с ответами:

Присвоение значений - C++
В течение работы программы в строковую переменную а1 случайным образом приходят имена переменных, объявленных в данной программе. Этим...

Присвоение значений - C++
Всем доброго времени суток, подскажите как присвоить переменной такое значение? 48847E5536130C10

Обращение по адресу к элементам структуры - C++
Есть структура fs: struct fs { f_element; s_element; ... n_element; }; Есть массив указателей на...

Вложенные структуры. Доступ к элементам структур - C++
Как через структуру реализовать что-то вроде этого. Есть структура с городами, каждый город имеет одинаковый набор свойств, но у каждого...


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

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

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