Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
114 / 114 / 39
Регистрация: 11.10.2011
Сообщений: 649
1

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

29.11.2011, 10:25. Просмотров 3760. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2011, 10:25
Ответы с готовыми решениями:

Присвоение элементам массива значений структуры
Доброго дня. У меня возникла проблема с присвоением элементам массива значений структуры. В чем...

Присвоение значений всем элементам массива
Как присвоить значение всем элементам массива наиболее простым способом думал что double...

Присвоение значений элементам двумерного вектора
Недавно добрие люди помогли мне со следующим кодом 1 код vector<vector<char>> vv; // ......

Присвоить значению kind одно из значений вложенной структуры type_hero
Мне необходимо присвоить значению kind одно из значений вложенной структуры type_hero (это...

14
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
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
114 / 114 / 39
Регистрация: 11.10.2011
Сообщений: 649
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
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
29.11.2011, 11:32 4
Heidel, индексация массивов в С/С++ начинается с нуля
0
114 / 114 / 39
Регистрация: 11.10.2011
Сообщений: 649
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
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
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
114 / 114 / 39
Регистрация: 11.10.2011
Сообщений: 649
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
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
29.11.2011, 13:00 8
Heidel, значит, твой компилятор не поддерживает новый стандарт
0
114 / 114 / 39
Регистрация: 11.10.2011
Сообщений: 649
29.11.2011, 13:15  [ТС] 9
Nameless One, у меня и в Microsoft Visual C++, и в С++ Builder 6 при компляции ошибка в этой строке, больше мне её попробовать откомпилировать не в чем. Подскажи, как должно быть написано в таком случае, чтобы успешно откомпилировалось?
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
29.11.2011, 13:44 10
C++
1
2
3
Message[0].code = 0xC0;
Message[0].length = 0x00;
Message[0].body.id = 0xA1;
и все это завернуть в какую-нибудь функцию. Или лучше воспользоваться классами, и не мучаться (пишешь ведь в С++)
0
114 / 114 / 39
Регистрация: 11.10.2011
Сообщений: 649
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
114 / 114 / 39
Регистрация: 11.10.2011
Сообщений: 649
29.11.2011, 15:24  [ТС] 13
Сыроежка, Message [6] - это массив из 6 структур типа message, и в приведенном куске кода я присваивала значения полям только одной структуры массива, а нужно всем 6-и.
0
Заблокирован
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
114 / 114 / 39
Регистрация: 11.10.2011
Сообщений: 649
29.11.2011, 15:43  [ТС] 15
Bers, да, можно было как во втором варианте кода объявить массив структур, и сразу присвоить значения полям каждого элемента массива.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2011, 15:43

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

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

Использование вектора для присваивания значений элементам структуры
Здравствуйте, форумчане. Сразу отмечу, что я новичек, так что, возможно, мой вопрос покажется вам...

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

Final для вложенной структуры
class A{ class B {..} final; }; так класс B теперь входит в размер A, но не инициализируется....


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

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

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