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

Как проинициировать в массиве структур (создонном ранее) каждый элемент - C++

Восстановить пароль Регистрация
 
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
24.11.2011, 20:21     Как проинициировать в массиве структур (создонном ранее) каждый элемент #1
1.Почему нельзя проиницировать каждую структуру в массиве созданном раньше:
C++
1
2
3
4
5
6
7
8
9
10
struct CandyBar
{
    char name[20];
    float weight;
    int kallories;
}; 
CandyBar candy[3];
candy[0]={"Mocha1 Munch",2.3,350};
candy[1]={"Mocha2 Munch",3.3,550};
candy[2]={"Mocha3 Munch",4.3,750};
-не работает

А если
C++
1
2
3
4
5
6
CandyBar candy[3]=
    {
        {"Mocha1 Munch",2.3,350},
        {"Mocha2 Munch",3.3,550},
        {"Mocha3 Munch",4.3,750}
    };
То все нормально.


То же с указателями - не работает:
C++
1
2
3
4
CandyBar* pcan=new CandyBar[3];
    *pcan={"Mocha1 Munch",2.3,350};
    *(pcan+1)={"Mocha2 Munch",3.3,550};
    *(pcan+2)={"Mocha3 Munch",4.3,750};
Можна ли проинициировать все разом,или только отдельно(так работает):
C++
1
2
3
4
5
6
7
8
9
10
CandyBar* pcan=new CandyBar[3];
    pcan->name="Mocha1 Munch";
    pcan->weight=2.3;
    pcan->kallories=350;
    (pcan+1)->name="Mocha2 Munch";
    (pcan+1)->weight=3.3;
    (pcan+1)->kallories=550;
    (pcan+2)->name="Mocha3 Munch";
    (pcan+2)->weight=4.3;
    (pcan+2)->kallories=750;
 Комментарий модератора 
Код выделяем тегами!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2011, 20:21     Как проинициировать в массиве структур (создонном ранее) каждый элемент
Посмотрите здесь:

В массиве B(n) каждый элемент,кроме первого, заменить суммой всех предедущих элементов C++
C++ Посчитать сколько раз встречается каждый элемент в массиве.
C++ В массиве каждый элемент, равный нулю, заменить средним арифметическим всех элементов
C++ В массиве нужно удалить каждый второй элемент и вывести сжатый массив
C++ Увеличить каждый элемент массива на величину следующего элемента в массиве
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
absokolov
29 / 29 / 1
Регистрация: 10.05.2011
Сообщений: 120
24.11.2011, 20:25     Как проинициировать в массиве структур (создонном ранее) каждый элемент #2
Сразу заполнить структуры "одним махом" можна только на этапе объявления массива!
Далее требуется отдельно для каждому члену давать значения!
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.11.2011, 20:26     Как проинициировать в массиве структур (создонном ранее) каждый элемент #3
NaV'i4ok,
C++
1
strcpy (candy[0].name,"Mocha1 Munch");
absokolov
29 / 29 / 1
Регистрация: 10.05.2011
Сообщений: 120
24.11.2011, 20:29     Как проинициировать в массиве структур (создонном ранее) каждый элемент #4
C++
1
strncpy(candy[0].name, "Mocha1 Munch", sizeof(candy[0].name))
Сыроежка
Заблокирован
24.11.2011, 20:36     Как проинициировать в массиве структур (создонном ранее) каждый элемент #5
NaV'i4ok,

Потому что инициализация при объявлении агрегата делается посредством вставки соответствующего кода на этапе компиляции. На этапе выполнения в общем случае нельзя предугадать, какой код потребуется.
В принципе это недостаток С++. В я зыке С этот недостаток частично устранили, введя составные литералы
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
24.11.2011, 20:54  [ТС]     Как проинициировать в массиве структур (создонном ранее) каждый элемент #6
Но надо присвоить не только строку:

Цитата Сообщение от NaV'i4ok Посмотреть сообщение
struct CandyBar
{
char name[20];
float weight;
int kallories;
};
Bers
Заблокирован
24.11.2011, 21:22     Как проинициировать в массиве структур (создонном ранее) каждый элемент #7
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
struct CandyBar
{
    CandyBar(const char* nName, const float nWeight, const int nKallories ):
                                                                        weight(nWeight), 
                                                                           kallories(nKallories)
                                                                            { strcpy (name,nName); }
 
    CandyBar& operator= (const CandyBar& istok)
    {
        strcpy (name,istok.name);  weight=istok.weight;  kallories=istok.kallories;
        return *this;
    }
 
    char name[20];
    float weight;
    int kallories;
}; 
 
int main()
{
    //можно так:
    CandyBar candy[3]= 
    {
        CandyBar("Mocha1 Munch",2.3,350),
        CandyBar("Mocha2 Munch",2.3,350),
        CandyBar("Mocha3 Munch",2.3,350)
    } ;
 
    //можно этак:
    candy[0]= CandyBar("TEST1",2.3,350);
    candy[1]= CandyBar("TEST2",2.3,350);
    candy[2]= CandyBar("TEST3",2.3,350);
 
    return 0;
};
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
24.11.2011, 21:58  [ТС]     Как проинициировать в массиве структур (создонном ранее) каждый элемент #8
Цитата Сообщение от Bers Посмотреть сообщение
//можно так:
CandyBar candy[3]=
{
CandyBar("Mocha1 Munch",2.3,350),
CandyBar("Mocha2 Munch",2.3,350),
CandyBar("Mocha3 Munch",2.3,350)
} ;
Если так то:
1>------ Build started: Project: Ex4_3, Configuration: Debug Win32 ------
1>Compiling...
1>Ex4_3.cpp
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\с++.с.прата\4.составные типы данных\ex4_3\ex4_3.cpp(13) : error C2059: syntax error : '{'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\с++.с.прата\4.составные типы данных\ex4_3\ex4_3.cpp(13) : error C2143: syntax error : missing ';' before '{'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\с++.с.прата\4.составные типы данных\ex4_3\ex4_3.cpp(14) : error C2059: syntax error : '{'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\с++.с.прата\4.составные типы данных\ex4_3\ex4_3.cpp(14) : error C2143: syntax error : missing ';' before '{'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\с++.с.прата\4.составные типы данных\ex4_3\ex4_3.cpp(14) : error C2143: syntax error : missing ';' before '}'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\с++.с.прата\4.составные типы данных\ex4_3\ex4_3.cpp(15) : error C2059: syntax error : '{'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\с++.с.прата\4.составные типы данных\ex4_3\ex4_3.cpp(15) : error C2143: syntax error : missing ';' before '{'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\с++.с.прата\4.составные типы данных\ex4_3\ex4_3.cpp(15) : error C2143: syntax error : missing ';' before '}'
1>Build log was saved at "file://c:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\С++.С.Прата\4.Составные типы данных\Ex4_3\Debug\BuildLog.htm"
1>Ex4_3 - 8 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Добавлено через 2 минуты
Извените, не то выделил:
Цитата Сообщение от Bers Посмотреть сообщение
//можно этак:
candy[0]= CandyBar("TEST1",2.3,350);
candy[1]= CandyBar("TEST2",2.3,350);
candy[2]= CandyBar("TEST3",2.3,350);
то ошибки смотреть в предыдущем посте

Добавлено через 2 минуты
Извените, не то выделил:
Цитата Сообщение от Bers Посмотреть сообщение
//можно этак:
candy[0]= CandyBar("TEST1",2.3,350);
candy[1]= CandyBar("TEST2",2.3,350);
candy[2]= CandyBar("TEST3",2.3,350);
то ошибки смотреть выше
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2011, 22:07     Как проинициировать в массиве структур (создонном ранее) каждый элемент
Еще ссылки по теме:

C++ Как найти заданный элемент (типа char) в массиве структур?
C++ В массиве заменить каждый отрицательный элемент среднем арифметическим положительных элементов
В массиве X(1.n) каждый элемент равен 0, 1 или 5 C++

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
24.11.2011, 22:07     Как проинициировать в массиве структур (создонном ранее) каждый элемент #9
NaV'i4ok, нужно видеть целиком весь код, который ты пытаешься скомпилировать.
Yandex
Объявления
24.11.2011, 22:07     Как проинициировать в массиве структур (создонном ранее) каждый элемент
Ответ Создать тему
Опции темы

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