Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Объявление свой структуры в классе TForm1 |
Автор: Нитонисе 28.12.2012, 15:52 |
В приватном разделе TForm1 объявляю структуру TMyStruct MyStruct. Билдер ругается с ообщением, что не знает что это за TMyStruct и сколько места под это зарезервировать. Если объявить TMyStruct *MyStruct с выделением памяти в конструкторе TForm1 и освобождением в деструкторе, то все работает. Вопрос - почему без указателя не выходит? Структура состоит из полей типа int. |
Автор: Нитонисе 28.12.2012, 16:18 |
Сам понял. Описание класса - это некая абстракция, внутри которой не может быть объявлен объект. |
Автор: artsb 28.12.2012, 16:35 | ||
Ерунда. У меня работает:
|
Автор: Dem_max 30.12.2012, 06:19 |
Я уже тыщу раз так делал |
Автор: Нитонисе 2.1.2013, 11:12 | ||
Да, действительно работает, но только если описание структуры привести непосредственно в файле с описанием класса TForm1. Я хотел все такие структуры вынести в отдельный файл и в файле с классом TForm1 привел только такую строчку
Директива #include делает видимым файл с описанием структуры TMyStruct для файла с описанием класса TForm1. Вот такая схема не работает, компилятор ругается, что не знает сколько зарезервировать места для TMyStruct, являющейся членом класса TForm1. Если же в классе дать указатель на структуру TMyStruct, то против такой схемы компилятор возражений не имеет. В чем тут загвоздка? |
Автор: mes 2.1.2013, 13:36 |
включение(инклуд) должен быть до описания класса формы .. |
Автор: borisbn 2.1.2013, 14:07 | ||||
либо так:
либо так:
|
Автор: Нитонисе 3.1.2013, 16:43 | ||
borisbn, первый вариант не срабатывает. Сообщение компилятора:
Курсор при этом в строчке, в которой моя структура прописана в классе. То есть компилятор не понимает что такое TMyStruct. А второй вариант - с указателями, работает. Но я не хочу делать с указателями. |
Автор: borisbn 3.1.2013, 17:03 |
Нитонисе, пардон. я опечатался должно быть так |
Автор: Нитонисе 3.1.2013, 17:13 |
Ну это понятно. У себя я все верно обозначил. Но не работает этот вариант. Правда у меня в структуре не int'ы, а пара bool'ов и UnicodeString'ов. Самой структуре я дал тип TFileInfo, а имя экземпляру структуры в составе класса TForm1 - FileInfo. Может какая заковыка с зарезервированными именами, хотя в варианте с уазателями все работает как надо... И кстати, у вас во втором варианте обращение к полю структуры а надо делать не через точку а через -> |
Автор: Нитонисе 3.1.2013, 18:41 | ||
Вот заголовочный файл формы
|
Автор: mes 3.1.2013, 19:29 | ||
ну закидывайте, добавляйте в файл формы инклуд и показывайте, как сделали.. Добавлено через 2 минуты и 8 секунд оффтопик, но declaration это : struct S; а struct S {}; это уже defination.. |
Автор: Нитонисе 3.1.2013, 20:21 | ||
Ну так а чего я тему-то создал? Закидывал - не работает ( |
Автор: mes 3.1.2013, 20:37 |
1. если правильно сделать - все работает.. 2. возможные причины Вам перечислили.. так что немного вниманиоя и усидчивости - и все получится.. 3. если все ж не получается, почему бы не показать, что имеете, ибо телепатов тут нет... Добавлено через 3 минуты и 12 секунд да и вообще предоставление максимальной информации от Вас и затребование минимальных услий со стороны - в Ваших же интересах.. но никак не наоборот.. |
Автор: Нитонисе 3.1.2013, 21:09 |
Вот я прикладываю простой пример с абсолютно аналогичной проблемой. Он у меня не компилируется с той же ошибкой. |
Автор: mes 3.1.2013, 21:13 | ||||
как и предполагалось: |
Автор: Нитонисе 3.1.2013, 21:27 | ||||
Ну убрал я из Unit2
Добавлено через 13 минут и 4 секунды Хм. Скомпилировалось. Правда почему-то не сразу. Добавил в Unit1 строчку
|
Автор: Нитонисе 3.1.2013, 21:54 |
В моей программе проблема также решена удалением ссылки на главную форму из файла, где объявлена структура. Спасибо за помощь ![]() |
Автор: Okkynek1 6.1.2013, 15:44 |
Модератор: Сообщение скрыто. |