Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в глобальном определении структуры, глабальная структура 
:(
    Опции темы
osmus
Дата 25.1.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 12.6.2008

Репутация: нет
Всего: нет



Длаю я так:

Определяю структуру global_init.h 
Код

#ifndef global_initH
#define global_initH
 struct GlobalGarage
{
  int id;
  AnsiString number;
  AnsiString street;
  AnsiString size;
};
extern GlobalGarage GlbGarage;


Выдает ошибки на AnsiString:
[C++ Error] global_init.h(30): E2303 Type name expected
[C++ Error] global_init.h(30): E2139 Declaration missing ;

Если сделать так:
Код

#ifndef global_initH
#define global_initH
 struct GlobalGarage
{
  int id;
  char number[10];
  char street[10];
  char size[10];
};
extern GlobalGarage GlbGarage;


То се нормально, но мне нужен AnsiString.



А если вставить его в cpp формы (сделать его локальным ) то все нормально smile 
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "global_init.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAEDGarage *AEDGarage;

 struct GlobalGarage
{
  int id;
  AnsiString number;
  AnsiString street;
  AnsiString size;
};

PM MAIL   Вверх
Comm
Дата 25.1.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Код

#ifndef global_initH
#define global_initH
#include <Classes.hpp>

struct GlobalGarage
{
  int id;
  AnsiString number;
  AnsiString street;
  AnsiString size;
};
extern PACKAGE GlobalGarage *GlbGarage;
 Не помню где точно тип АнсиСтринг описывается,ты поищи и вставь вместо <Classes.hpp>

В форме, в которой хочешь работать со своей структурой объяви глобальный указатель на эту структуру GlobalGarage *grjb;
Код

//---------------------------------------------------------------------------
GlobalGarage *grjb;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  grjb=new GlobalGarage1;
  grjb->street="sdasds";
  delete grjb;
}


Это сообщение отредактировал(а) Comm - 25.1.2009, 19:43


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 25.1.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Или так 
Код

#ifndef global_initH
#define global_initH
#include "Unit главной формы.h"

struct GlobalGarage
{
  int id;
  AnsiString number;
  AnsiString street;
  AnsiString size;
};
extern PACKAGE GlobalGarage *GlbGarage;



--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
osmus
Дата 25.1.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 12.6.2008

Репутация: нет
Всего: нет



Огромное спасибо smile 
Все получилось.

Но возникло предупреждение на форму:
[Linker Warning] Public symbol '_grjb' defined in both module C:\............OPERGARAGES.OBJ

Еще примитивный вопрос:
А как обнулить переменные структуры(тоесть сделать clear struct)?? Не перебирая каждую переменную....

Это сообщение отредактировал(а) osmus - 25.1.2009, 20:24
PM MAIL   Вверх
Comm
Дата 25.1.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата

Но возникло предупреждение на форму:
[Linker Warning] Public symbol '_grjb' defined in both module C:\............OPERGARAGES.OBJ

Ругается на то что "grjb" определен в обоих модулях , покажи код страницы где описана структура

Цитата

Еще примитивный вопрос:
А как обнулить переменные структуры(то есть сделать clear struct)?? Не перебирая каждую переменную....

memset(grjb,0,sizeof(grjb));

Обычные переменные AnsiString так обнулять нельзя(я так прокололся),а вот на счет структур честно незнаю)


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
osmus
Дата 25.1.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 12.6.2008

Репутация: нет
Всего: нет



Цитата

Ругается на то что "grjb" определен в обоих модулях , покажи код страницы где описана структура

Спасибо я уже разобрался тупая ошибка, стыдно ее описывать.


Цитата

memset(grjb,0,sizeof(grjb));

неработает
PM MAIL   Вверх
Comm
Дата 25.1.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



memset(&grjb,0,sizeof(grjb));


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
fridkaratel
Дата 26.1.2009, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



А если структура имеет вид:
struct tagMYSTRUCT {
  unsigned char *ucArr;
  unsigned char **ucMatrix;
};
где
ucArr = new unsigned char[X];
ucMatrix[Y1] = new unsigned char[Z];
...
ucMatrix[Y10] = new unsigned char[Z];

как тут обнулить структуру, при этом не сделать утечку памяти из-за того, что не выполнилось delete[] ucArr и delete[] ucMatrix[Y1..Y10]?
PM   Вверх
Comm
Дата 26.1.2009, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Нука покажи код  как ты это все создавал smile 


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
osmus
Дата 26.1.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 12.6.2008

Репутация: нет
Всего: нет



Я извеняюсь, че то у меня неполучается (3 года ка неработал с С, уже многое что подзабыл)

Как определить глобальную  стркутуру?

Далаю так:
Есть Unit который включен во все формы global_init.h
его код:
Код

#ifndef global_initH
#define global_initH
#include "main_istok.h" //главная форма
struct GlobalGarage
{
  int id;
  AnsiString number;
  AnsiString street;
  AnsiString size;
  AnsiString sdan_expluat;
  AnsiString g_type;
};
extern PACKAGE GlobalGarage GlbGarage;
 

Дальше у меня есть две формы, на одной я вношу данные в структуру, а на другой считываю:
1форма(ввод данных)
Код

#include "global_init.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMDIISTOK *MDIISTOK;

GlobalGarage *grjb;

//---------------------------------------------------------------------------
__fastcall TMDIISTOK::TMDIISTOK(TComponent* Owner)
        : TForm(Owner)
{
 grjb = new GlobalGarage;

}
.
.
.
void __fastcall TMDIISTOK::BitBtn3Click(TObject *Sender)
{
 grjb->id        = StrToInt(IDSelG->Text);
 grjb->number    = Query->Fields->FieldByName("number")->AsString;
 grjb->street    = Query->Fields->FieldByName("street")->AsString;
 grjb->size      = Query->Fields->FieldByName("size")->AsString;
 grjb->sdan_expluat = Query->Fields->FieldByName("sdan_expluat")->AsString;
 grjb->g_type    = Query->Fields->FieldByName("g_type")->AsString;
}



Как мне во второй форме считать данные ??? 
PM MAIL   Вверх
fridkaratel
Дата 26.1.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Цитата(Comm @ 26.1.2009,  16:00)
Нука покажи код  как ты это все создавал smile

ну как-как... (если это ко мне вопрос был задан smile )

Код
struct tagMYSTRUCT {
  unsigned char *ucArr;
  unsigned char **ucMatrix;
} MyStruct;
//--------------------
void CreateStruct() {
  MyStruct.ucArr = new unsigned char[1024];
  for (int a = 0; a < 10; a++) {
    MyStruct.ucMatrix[a] = new unsigned char * [512];
    for (int b = 0; b < 512; b++) {
      MyStruct.ucMatrix[a][b] = new unsigned char[2048];
    }
  }
}


@osmus, у тебя как-то странно определена структура...
Вместо "extern PACKAGE GlobalGarage GlbGarage;" надо использовать "extern GlobalGarage *GlbGarage;"

Это сообщение отредактировал(а) fridkaratel - 26.1.2009, 14:28
PM   Вверх
Comm
Дата 26.1.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата

@osmus, у тебя как-то странно определена структура...
Вместо "extern PACKAGE GlobalGarage GlbGarage;" надо использовать "extern GlobalGarage *GlbGarage;"

Это я просто скопировал ему пример, PACKAGE просто забыл убрать)
А если уж быть до конца откровенным то  вам надо было написать не только как надо,но и почему... Что бы товарищ Osmus  был в курсе)


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 26.1.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Код

 struct tagMYSTRUCT {
  unsigned char *ucArr;
  unsigned char **ucMatrix;
} MyStruct;
//--------------------
void CreateStruct() {
  MyStruct.ucArr = new unsigned char[1024];
  for (int a = 0; a < 10; a++) {
    MyStruct.ucMatrix[a] = new unsigned char * [512];
    for (int b = 0; b < 512; b++) {
      MyStruct.ucMatrix[a][b] = new unsigned char[2048];
    }
  }
}


И это работает ? smile  у меня нет xD

Это сообщение отредактировал(а) Comm - 26.1.2009, 23:06


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 26.1.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата

Дальше у меня есть две формы, на одной я вношу данные в структуру, а на другой считываю:
1форма(ввод данных)

 Если name второй формы "Form2" то обращатсья к ней нужно
Код

 Form2->Button1->Caption.....

А перед этим 
Установить фокус на Unit-ы  "*.cpp" и открыть меню "File" в программе C++ Builder и выбрать из меню пункт  "Include unit Hdr..."  там будет список возможных присоеденяемых заголовочных файлов,вот и выбирай)



Это сообщение отредактировал(а) Comm - 26.1.2009, 21:45


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 26.1.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Немного подумав и помучившийся(так как сам иногда путаюсь в указателях)
сделал так:
Код

struct tagMYSTRUCT {
    unsigned char *ucArr;
    unsigned char ***ucMatrix;
  }*MyStruct;
  MyStruct= new tagMYSTRUCT;
  MyStruct->ucArr = new unsigned char [1024];
  MyStruct->ucMatrix = new unsigned char **[10];
  for(int a = 0; a <=10; a++) {
      //Memo1->Lines->Add(IntToStr(a)+"---");
      MyStruct->ucMatrix[a] = new unsigned char *[512];
      for(int b = 0; b <=512; b++) {
        //Memo1->Lines->Add("    ---"+IntToStr(b));
        MyStruct->ucMatrix[a][b]= new unsigned char[2048];
      }
  }
  strcpy(MyStruct->ucMatrix[10][10],"Ку ка ри ку ёпто =)");
  ShowMessage((char*)MyStruct->ucMatrix[10][10]); // Всё предложение ))
  ShowMessage((char)MyStruct->ucMatrix[10][10][0]);// первый символ

Вот такой вот жесткий изврат у меня получился,и как всё это дело обнулять я понятия не имею =))))


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.