Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/42: Рейтинг темы: голосов - 42, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 06.05.2011
Сообщений: 3

Инициализация структуры

06.05.2011, 16:18. Показов 8906. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток всем!

Кто-нибудь может подсказать, как инициализировать переменную типа структуры, нечто вроде следующего:


C++
1
2
3
4
5
6
struct ttmp
         {
         TDateTime dt;
         int a;
         };
ttmp st = {0.0, 0};
Проблема с инициализацией поля dt типа TDateTime.
---
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2011, 16:18
Ответы с готовыми решениями:

Инициализация структуры
Всем привет! Подскажите плиз, как инициализировать структуру с переменной AnsiString struct str{ AnsiString ttt; }; str...

Инициализация структуры
Не удается инициализировать структуру, которая имеет тип AnsiString нижеприведенным способом в C++Builder 6. Этот код находится не в...

Инициализация структуры
Приветствую всех! Подскажите, существует ли простое решение следующей задачи. Есть несколько структур, содержащих числовые поля и массивы...

6
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.05.2011, 21:53
вопче то для структур пишут через точку - ttmp.st , ну , и у вас то dt , то st , не понятно , однако
и если у вас проблема , но есть ошибки и их описание - вырабатывайте в себе привычку приводить сюда за ручку тексты ошибок и предпреждений.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
07.05.2011, 12:15
LK,


e2e4 создал экземпляр своей структуры и хотел её проинициализировать.
Надо вот так:
C++
1
2
3
4
5
6
struct ttmp
         {
         TDateTime dt;
         int a;
         };
ttmp st = {TDateTime(0.0), 0};
e2e4, выработай для себя привычку нормального оформления кода, чтобы людей не путать.
Если кодишь в CBuilder'е, рекомендуют так:
C++
1
2
3
4
5
6
struct TTest {
        TDateTime dtTestDate;
        int iTestInt;
    };
 
    TTest Test = {TDateTime(0.0), 0};
Ну и немного теории по структурам:
если хочешь делать инициализацию по умолчанию,
тогда делай так:

C++
1
2
3
4
5
6
7
8
9
struct TTest {
        TTest() : dtTestDate(0.0), iTestInt(0) {
        };
 
        TDateTime dtTestDate;
        int iTestInt;
    };
 
    TTest Test;
1
0 / 0 / 0
Регистрация: 06.05.2011
Сообщений: 3
10.05.2011, 12:32  [ТС]
Спасибо за участие, прошу извинить что не поддерживал тему (праздники...)

Предложенный вариант кода (BCB6) работает!
C++
1
2
3
4
5
6
7
8
9
struct TTest {
                TTest() : dtTestDate(0.0), iTestInt(0) {
                };
 
                TDateTime dtTestDate;
                int iTestInt;
        };
 
        TTest Test;
А вот на этот вариант
C++
1
2
3
4
5
6
struct TTest {
                TDateTime dtTestDate;
                int iTestInt;
        };
 
        TTest Test = {TDateTime(0.0), 0};
получаем от компилятора:
[C++ Error] Unit1.cpp(14): E2131 Objects of type 'TTest' cannot be initialized with { }

Хотя если убрать поле TDateTime то все нормально.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
10.05.2011, 14:11
Проверял на CBuilder XE у меня работает.
Это лёгко проверить, найди класс TDateTime (нажми на нём ctrl + левая кн.мыши)
и посмотри какие параметры в конструктор передаются, может быть там нет конструктора с double

Вот это конструкторы TDateTime в CBuilder 2010,
сравни их с конструкторами в BCB6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
__fastcall TDateTime()                                  {Val = 0;}
    __fastcall TDateTime(const TDateTimeBase& src)          {Val = src.Val;}
    __fastcall TDateTime(const TDateTime& src)              {Val = src.Val;}
    __fastcall TDateTime(const double src)                  {Val = src;} // конструктор с double
    __fastcall TDateTime(const int src)                     {Val = src;}
    __fastcall TDateTime(const System::String& src, TDateTimeFlag flag = DateTime);
    __fastcall TDateTime(unsigned short year, unsigned short month,
            unsigned short day);
    __fastcall TDateTime(unsigned short hour, unsigned short min,
            unsigned short sec, unsigned short msec);
    __fastcall TDateTime(unsigned short year, unsigned short month,
            unsigned short day, unsigned short hour, unsigned short min,
            unsigned short sec, unsigned short msec);
0
0 / 0 / 0
Регистрация: 06.05.2011
Сообщений: 3
11.05.2011, 09:09  [ТС]
Есть там, вроде как и с double конструктор. Дело возможно в реализации компилятора.
В Helpe по этой ошибке пишут:
******
Ordinary C structures can be initialized with a set of values inside braces.

C++ classes can only be initialized with constructors if the class has constructors, private members, functions, or base classes that are virtual.
******

Я далеко не волшебник в C/C++, только учусь, но что-то мне подсказывает что тип struct является классом и инициализировать структуру (в стиле C++) надо с помощью конструктора, явно объявленного в структуре. Компилятор CBuilder XE, видно, более продвинутый, сам соображает чего мы хотим.
Еще раз спасибо всем кто ответил, решение найдено.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
11.05.2011, 10:48
Очень и очень странно, проверил в сейчас в CBuilder 2010 и в VisualStudio тоже с классом в качестве параметра,
тоже всё работает.
Очень странно, что в BCB6 не работает.
В общем, мой совет такой, если такие элементарные вещи там не работают, срочно меняй компилятор.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.05.2011, 10:48
Помогаю со студенческими работами здесь

Инициализация структуры
Есть структура struct msg quest; struct msg { double clientId; size_t cash; char message; };

Инициализация структуры
Приветствую всех. Есть такой код: typedef struct { char a; char b; } ST; ST b = { "abcde", "fghij" }; Компилятор...

инициализация структуры
Всем привет, нужно достать данные о DEP и ASLR каждого процесса, написал такую вещь void GetDepAndASLR(DWORD ProcID) { HANDLE...

Инициализация структуры
Здравствуйте, пишу программу на ассемблере в которой пытаюсь инициализировать структуру, но TASM выдаёт ошибку Illegal override in...

Инициализация структуры
Есть такой код: typedef struct Point3DStruct { int x; int y; int z; } Point3D; void myFunction1() { ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru