Поиск:

Ответ в темуСоздание новой темы Создание опроса
> статический массив структур преобразовать в дин-й 
V
    Опции темы
Bima
Дата 15.5.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть код:
Код

#define MAX_TAG 14
TDataForOPCServer DataForOpc[3]=
{
    { // Описание первого "устройства":
        1,
        MAX_TAG,AnTag, // количество и указатель на массив аналоговых тегов
        MAX_TAG,BitTag, // количество и указатель на массив битовых тегов
        MAX_TAG,IntTag, // количество и указатель на массив целых тегов
        3,  // structure version # 3 !!!
        "Device1"
  },
  {  // Описание второго "устройства":
        1,
        MAX_TAG,AnTag+MAX_TAG,
        MAX_TAG,BitTag+MAX_TAG,
        MAX_TAG,IntTag+MAX_TAG,
        3,    // structure version # 3 !!!
        "Device2"
  },
  {0,0,0} // нулевая структура - конец массива устройств
};

где TDataForOPCServer структура типа:
Код

struct TDataForOPCServer
{
  unsigned char dataIsValid;   /* признак того, что данные корректны 
                                  (иначе BAD для всех тегов устройства)*/
  unsigned short anTagsQnty;   // количество аналоговых тегов
  const TAnTag *anTagsArray;   // указатель на массив аналоговых тегов
  unsigned short bitTagsQnty;  // количество битовых тегов
  const TBitTag *bitTagsArray; // указатель на массив битовых тегов
  unsigned short intTagsQnty;  // количество целых тегов
  const TIntTag *intTagsArray; // указатель на массив целых тегов

  unsigned short structVersionNumber;
  char DeviceName[64]; // имя устройства
  union
  {
    char Reserved[128]; // Зарезервировано место для будущих расширений.

    struct // а это сами расширения:
    {
      //пока их нет
    }  ension;
  } Ext;
};

пытаюсь все это сделать динамически, но  ничего не выходит. Делаю так:
Код

//это перед кодом программы:
TDataForOPCServer *DataForOpc;

//Это в коде с программой
   DataForOpc=new TDataForOPCServer [NumPotok+1]; //Объявляем нужное колличество данных
   for(int k=0; k<NumPotok; k++)
      {
      DataForOpc[k]->dataIsValid=1;
      DataForOpc[k]->anTagsQnty =MAX_TAG;
      DataForOpc[k]->anTagsArray=AnTag+k*MAX_TAG;
      DataForOpc[k]->bitTagsQnty=1;
      DataForOpc[k]->bitTagsArray=BitTag+k;
      DataForOpc[k]->intTagsQnty=1;
      DataForOpc[k]->intTagsArray=IntTag+k;
      }

В первой строке инициализации DataForOpc[k]->dataIsValid=1; вываливается ошибка
Как правильно сделать???



--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
ama_kid
Дата 15.5.2007, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(Bima @  15.5.2007,  08:34 Найти цитируемый пост)
вываливается ошибка
Что за ошибка-то хоть? Может из-за неправильной работы с указателями? 
Код
...
(DataForOpc+k)->dataIsValid=1;
// либо
DataForOpc[k].dataIsValid=1;
...




--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Bima
Дата 15.5.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Error:
Код

[C++ Error] dataserv.cpp(231): E2288 Pointer to structure required on left side of -> or ->* 

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

   DataForOpc=new TDataForOPCServer [NumPotok+1]; //Объявляем нужное колличество данных
   for(int k=0; k<NumPotok; k++)
      {
      (DataForOpc+k)->dataIsValid=1;
      (DataForOpc+k)->anTagsQnty =dRows;
      (DataForOpc+k)->anTagsArray=AnTag+k*dRows;
      (DataForOpc+k)->bitTagsQnty=1;
      (DataForOpc+k)->bitTagsArray=BitTag+k;
      (DataForOpc+k)->intTagsQnty=1;
      (DataForOpc+k)->intTagsArray=IntTag+k;
      (DataForOpc+k)->structVersionNumber=3;
      sprintf((DataForOpc+k)->DeviceName,"Device%d",k);
      }
   (DataForOpc+NumPotok)->dataIsValid=0;
   (DataForOpc+NumPotok)->anTagsQnty =0;
   (DataForOpc+NumPotok)->anTagsArray=0;

То заполнение структуры идет только для первого элемента массива, то есть для DataForOpc[0], а для следущего нет заполнения :(


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Anikmar
Дата 15.5.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Почему не написать нормально?
DataForOpc[k]->dataIsValid=1;
и т.д.
PM MAIL ICQ   Вверх
Sartorius
Дата 15.5.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



Точку надо, а не стрелку. Элементы массива - не указатели, а структуры
PM MAIL ICQ   Вверх
Anikmar
Дата 15.5.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Sartorius @  15.5.2007,  10:17 Найти цитируемый пост)
Точку надо, а не стрелку. Элементы массива - не указатели, а структуры 

Ну да, конечно, это я просто скопировал и не посмотрел  
DataForOpc[k].dataIsValid=1;
PM MAIL ICQ   Вверх
Bima
Дата 15.5.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, все заработало


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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