Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача массива структур функции, инициализация и передача массива структ. 
:(
    Опции темы
everyone
  Дата 16.9.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



есть метод:

Код

void addWaggonsToTrain(struct TWaggon *waggons[], int count);


структура TWaggon:

Код

struct TWaggon
{
   enum Mineral mineral;      // вид груза
   int number;                // номер
};


не слишком важно, но есть ещё и перечисление:

Код

enum Mineral {mOil, mGold, mCoal}; 


как мне выделить динамическую память для элементов массива, инициализировать элементы и передать указатель на массив функции?

я пытался делать нечто:

Код

    TWaggon *wagons = new TWaggon[5];
    wagons->mineral = mOil;
    wagons->number = 1;
    
    addWaggonsToTrain(&wagons, 1);


и этот вариант компилируется. Но не работает. Никак не работает. Не хочет... и всё тут.


--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
AnLun
Дата 16.9.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

void addWaggonsToTrain(struct TWaggon *waggons, int count);

Просто передавай указатель(без квадратных скобок).

Добавлено через 2 минуты и 4 секунды
Кстати, а зачем ты передаешь &wagons?
Код

addWaggonsToTrain(wagons, 1);

просто так передай

Добавлено через 4 минуты и 24 секунды
Блин, что-то я все 'передаю' smile 
PM MAIL   Вверх
everyone
  Дата 16.9.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

просто так передай


не передавалось, иначе бы я точно передал. Как я уже только не передавал  smile 

но вот, что я выяснил -struct TWaggon *waggons - это массив указателей на структуру. Создаётся и инициализируется он так:

Код

            TWaggon *wagons[5];

    wagons[0] = new TWaggon();
    wagons[0]->mineral = mGold;
    wagons[0]->number = 4;

            addWaggonsToTrain(wagons, 1);


то, что я делал раньше - TWaggon *wagons = new TWaggon[5]; - это указатель на структуры.

но всё по-прежнему не работает. Может ли это быть из-за того, что указатель wagons статический? и как решить эту проблему?

Что делает с массивом функция я узнать никак не могу, кода нет.
--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
Cheloveck
Дата 16.9.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Код

#include <iostream>

class vars
{
public:
  void print()
  {
    std::cout << my_number << std::endl;
  }
  int my_number;
};

class test
{
public:
  void add( vars * var_array, int count )
  {
    for( int i = 0; i < count; i++ )
    {
      var_array[i].print();
    }
  }
};

int main()
{
  const int count = 10;
  vars * v_array = new vars[count];
  for( int i = 0; i < count; i++ )
  {
    v_array[i].my_number = i;
  }
  test t;
  t.add( v_array, count );
  delete []v_array;
  return 0;
}

Это не твой код, но принцип, примерно, тот-же. Думаю, что тебе нужно было это.

Это сообщение отредактировал(а) Cheloveck - 16.9.2009, 23:25


--------------------
user posted image
PM Jabber   Вверх
Andrey44
Дата 17.9.2009, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Код


enum Mineral {mOil, mGold, mCoal};

struct TWaggon
{
    enum Mineral mineral;      // вид груза
    int number;                // номер

    TWaggon(Mineral min, int num)
    {
        Mineral = min;
        number = num;
    }
};

std::vector<TWaggon> vecWaggons;
for (int i = 0; i < 5; i++)
{
    vecWaggons.push_back(TWaggon(mOil, i));
}

addWaggonsToTrain(&vecWaggons.front(), vecWaggons.size());



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Anikmar
Дата 17.9.2009, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А какая собственно задача?

Создать только класс вагона и функции управления составом?
Или создать как класс вагона, так и класс состава?
Цитата(everyone @  16.9.2009,  23:01 Найти цитируемый пост)
но вот, что я выяснил -struct TWaggon *waggons - это массив указателей на структуру. Создаётся и инициализируется он так:

Создать вы его создали, но проинициализировали только 1-й элемент. Остальные 4 содержат мусор.

Что вообще должна делать функция addWaggonsToTrain?
Ей в качестве параметра передается указатель на состав? Или просто на список (массив) вагонов?

Добавлено через 55 секунд
Пока я писал Andrey44 сделал  smile 
PM MAIL ICQ   Вверх
mrbrooks
Дата 17.9.2009, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Andrey44, а если речь идет о С?  smile 
в таком случае конечно идем по классике, передам указатель на массив и его размер
PM MAIL   Вверх
Andrey44
Дата 17.9.2009, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Цитата(mrbrooks @  17.9.2009,  07:45 Найти цитируемый пост)
Andrey44, а если речь идет о С?
post1968596]в таком случае конечно идем по классике, передам указатель на массив и его размер
Это точно!
Но никто не говорил о С smile 



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
kiler4747
  Дата 4.6.2011, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Почему функция не работает?
Код


//Структура
class inf
{
public: wchar_t *name;
public: wchar_t *path;
};

void CopyFolder( CString sours,  CString dest, inf *ind, long * num)
{
            ...
            WIN32_FIND_DATA data;
            ind[indexx].name = data.cFileName;
            indexx++;
}

//вызов функции
        CString st1 = str1;
    CString st2 = str2;
    inf *ind = new inf[9000];
    CopyFolder(st1,st2,ind, num);



Это сообщение отредактировал(а) kiler4747 - 4.6.2011, 23:03
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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