Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите решить проблему, Проблемы с созданием массива объектов 
:(
    Опции темы
Crywolf
Дата 8.6.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем такое дело.Пишу одну программу.Написал свой класс.Во его .н файл
Код

#ifndef PILOT_H
#define PILOT_H
#include <QObject>
#include <QString>

class Pilot : public QObject
{
    Q_OBJECT
private:
    QString name;
    QString abr;
    unsigned int qPlace;
    unsigned int rPlace;
    //QString **race_rates;
public:
    //Pilot & operator=(const Pilot &other);
    Pilot(QString *,QString *);
    Pilot();
    void setPilotName(QString);
    void setPilotAbr(QString);
};

#endif // PILOT_H

и вот цппшник
Код

#include "Pilot.h"
#include <QString>

Pilot::Pilot(QString *n,QString *ab)
{
    name = *n;
    abr = *ab;
    qPlace = 0;
    rPlace = 0;
}
Pilot::Pilot()
{
    qPlace = 0;
    rPlace = 0;
}
void Pilot::setPilotName(QString n)
{
    name = n;
}
void Pilot::setPilotAbr(QString ab)
{
    abr = ab;
}

Так вот, в другом классе я создаю массив этих объектов.Но не могу толком выделить для них память.Вот что я пробую:
Код

    Progn *clfp[num1];
    Pilot *pileton[num2];
    for (int i=0;i<num1;i++)
        clfp[i] = new Progn();
    for (int i=0;i<num2;i++)
        pileton[i] = new Pilot();

num1 и num2 - любые числа.
Помогите пожалуйста!!В чём может быть проблема?
PM MAIL   Вверх
borisbn
Дата 9.6.2010, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Если num1 и num2 это переменные, то так
> P i l o t * p i l e t o n [ n um2 ]
описывать массив указателей нельзя. Нужно выделить его динамически:
P i l o t ** p i l e t o n =new Pilot*[ n um2 ];
и далее по тексту.
А лучше использовать
std::vector< Pilot* >


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 9.6.2010, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(borisbn @  9.6.2010,  06:19 Найти цитируемый пост)
описывать массив указателей нельзя.

можно.
но каждому указателю нужно выделить память.
но как уже сказали -
Цитата(borisbn @  9.6.2010,  06:19 Найти цитируемый пост)
std::vector< Pilot* > 


но еще лучше, если очень нужно хранить указатели:
std::vector<std::shared_ptr<Pilot>>
PM WWW   Вверх
borisbn
Дата 9.6.2010, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



boostcoder, если num1 - переменная, а не константа, то так выделять можно только на стеке, и, если не изменяет память, не во всех компиляторах. С shared_ptr полностью согласен (-1 мне, за то, что забыл smile )


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 9.6.2010, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(borisbn @  9.6.2010,  07:54 Найти цитируемый пост)
если не изменяет память, не во всех компиляторах.

угу. насколько мне известно, только в gcc.
PM WWW   Вверх
djamshud
Дата 9.6.2010, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



Цитата

8.3.4 Arrays
In a declaration T D where D has the form

   D1 [constant-expression]


Цитата

5.19 Constant expressions

An integral constant-expression can involve only literals (2.13), enumerators, const variables or static
data members of integral or enumeration types initialized with constant expressions (8.5), non-type tem-
plate parameters of integral or enumeration types, and sizeof expressions. Floating literals (2.13.3) can
appear only if they are cast to integral or enumeration types. Only type conversions to integral or enumera-
tion types can be used. In particular, except in sizeof expressions, functions, class objects, pointers, or
references shall not be used, and assignment, increment, decrement, function-call, or comma operators shall
not be used.


По стандарту размер массива указывается константой. Прямых ссылок не дам, я из pdf-ки копировал, стандарт 2003-го года.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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