Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] QList, полное непонимание =( 
:(
    Опции темы
kemiisto
  Дата 4.9.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



andrew_121, опять та же ситуация. Исходники несколько изменились. Теперь у нас в private секции Chemistry::Molecule сразу 3 QList'а (к тому же один со сложной структурой):
Код

  private:
    typedef QList<Chemistry::Bond*> IncidenceList;
    typedef QList<IncidenceList> IncidenceMatrix;

    IncidenceMatrix incidenceMatrix_;
    QList<Chemistry::Bond*> chemistryBonds_;
    QList<Chemistry::Atom*> chemistryAtoms_;


Ну собственно, таже проблема. Отрабатывает конструктор, все 3 списка инициализируются. 

user posted image

При попытке добавить атом в Render::Viewer::mousePressEvent в самом начале ставим точку останова:

user posted image

Вот. Куда то пропал incidenceMatrix_. Куда?

А самое интересное. Если в объявлении поменять местами скажем так:
Код

  private:
    typedef QList<Chemistry::Bond*> IncidenceList;
    typedef QList<IncidenceList> IncidenceMatrix;

    QList<Chemistry::Bond*> chemistryBonds_;
    QList<Chemistry::Atom*> chemistryAtoms_;
    IncidenceMatrix incidenceMatrix_;

то на точке останова не будет уже chemistryBonds_

user posted image

То есть получается: кто первым объявлен (первым инициализируется в конструкторе?), тот куда-то пропадает. smile Бред, конечно. smile Может опять чего в pro-файле начудил. smile 

Исходники приложил.

Это сообщение отредактировал(а) kemiisto - 4.9.2009, 21:36

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  QDalton.zip 84,42 Kb


--------------------
PM MAIL WWW GTalk Jabber   Вверх
kemiisto
Дата 4.9.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Немного побегал дебагом. Список портится внутри void Render::Viewer::updateMolecule().

До вызова updateGL() всё отлично, после <internal error>. А это метод (точнее слот) QGLViewer'а. И это уже как-то нехорошо...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
andrew_121
Дата 4.9.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(kemiisto @  4.9.2009,  21:35 Найти цитируемый пост)
То есть получается: кто первым объявлен (первым инициализируется в конструкторе?

Да. В GCC это так.

Цитата(kemiisto @  4.9.2009,  21:35 Найти цитируемый пост)
Бред, конечно.

Да нет же. Это в стандарте описано.

Цитата(kemiisto @  4.9.2009,  21:35 Найти цитируемый пост)
Может опять чего в pro-файле начудил.

Не ты. Это креатор его по своему записал(если ты менял проект, не исходники).

щас гляну...


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
kemiisto
Дата 5.9.2009, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(andrew_121 @  4.9.2009,  23:54 Найти цитируемый пост)
Да нет же. Это в стандарте описано.

Я не про порядок вызова конструкторов, а про ситуацию в целом. Я чего то явно не понимаю. А, вообще, язык - полное *****. Как на нём вообще возможно писать? Никогда не знаешь, кто виноват: ты, разработчики компилятора, сторонней библиотеки или стандарта, оставившие слишком много мест с undefined dehaviour, ОС, господь бог, ... smile 

Это сообщение отредактировал(а) kemiisto - 5.9.2009, 11:29


--------------------
PM MAIL WWW GTalk Jabber   Вверх
kemiisto
  Дата 5.9.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Жесть. Ночь не спал, а толку 0.

andrew_121, зато я нашёл прикол в своих исходниках.
Вот функция:
Код

uint8_t File::Dal::moduleIndex(const QString& moduleName)
{
  for (uint8_t i = 0; i < modules_.size(); ++i)
  {
    if (modules_[i].name() == moduleName + "\n")
      return i;
  }
  return -1;
}

Это компилируется. Ерунда, что тип возвращаемого значения беззнаковый, а в одной из веток if я возвращаю -1! smile Нормуль! Ругается только по месту вызова этой функции:
Код

bool File::Dal::hasParametre(const QString& moduleName,
                                  const QString& submoduleName,
                                  const QString& parametreName)
{
  uint8_t m = moduleIndex(moduleName);
  if (m != -1)

И то warning.

Вот это, видимо, и называется строгая типизация. smile 

Это сообщение отредактировал(а) kemiisto - 5.9.2009, 12:18


--------------------
PM MAIL WWW GTalk Jabber   Вверх
andrew_121
Дата 5.9.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



kemiisto, Снова в ту же степь. Знаешь что плохому танцору мешает? Вот вот, я***.
По делу: Нет пока возможности собрать твою программу. Попробуй просто прежний .pro файл подкинь. По идее должно заработать.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
kemiisto
Дата 5.9.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(andrew_121 @  5.9.2009,  15:39 Найти цитируемый пост)
kemiisto, Снова в ту же степь. Знаешь что плохому танцору мешает? Вот вот, я***.

 smile Дык я же и не спорю. Я плохой танцор. Но я же не один такой. Нас много!

Цитата(andrew_121 @  5.9.2009,  15:39 Найти цитируемый пост)
По делу: Нет пока возможности собрать твою программу. Попробуй просто прежний .pro файл подкинь. По идее должно заработать. 

Сейчас попробую.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
kemiisto
Дата 5.9.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(kemiisto @  5.9.2009,  15:41 Найти цитируемый пост)
Сейчас попробую. 

Нет, видимо, не в этом дело.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
andrew_121
Дата 5.9.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(kemiisto @  5.9.2009,  15:47 Найти цитируемый пост)
Нет, видимо, не в этом дело. 

А под Мас-ом работает?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
kemiisto
Дата 5.9.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(andrew_121 @  5.9.2009,  17:26 Найти цитируемый пост)
А под Мас-ом работает? 

Нет. Нигде не работает.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
andrew_121
Дата 5.9.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(kemiisto @  5.9.2009,  16:36 Найти цитируемый пост)
Нет. Нигде не работает. 

Значит ошибка в коде.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 5.9.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



kemiisto, у тебя этот объект копируется где нибудь? (в смысле не указатель на него, а именно сам объект, deep copy)
PM MAIL Skype GTalk   Вверх
kemiisto
Дата 5.9.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(Lazin @  5.9.2009,  17:40 Найти цитируемый пост)
kemiisto, у тебя этот объект копируется где нибудь? (в смысле не указатель на него, а именно сам объект, deep copy) 

Не очень понял о каком конкретно объекте идёт речь. Если о chemistryMolecule_, то да. Читаем файл, разбираем, создаём молекулу, передаём вьюверу для отрисовки через void Render::Viewer::setMolecule(const Chemistry::Molecule& chemistryMolecule)
 
Цитата(andrew_121 @  5.9.2009,  17:39 Найти цитируемый пост)
Значит ошибка в коде. 

Вот я её и пытаюсь локлизовать.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Lazin
Дата 5.9.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(kemiisto @  5.9.2009,  16:55 Найти цитируемый пост)
Не очень понял о каком конкретно объекте идёт речь. Если о chemistryMolecule_, то да. Читаем файл, разбираем, создаём молекулу, передаём вьюверу для отрисовки через void Render::Viewer::setMolecule(const Chemistry::Molecule& chemistryMolecule)



Цитата(kemiisto @  27.8.2009,  13:25 Найти цитируемый пост)
namespace Chemistry
{
  class Molecule
  {
  public:
    ...
    void rebond();
  private:
    ...
    QList<Chemistry::Atom>* atoms_;
  };
} // namespace Chemistry


я имел ввиду, что объект класса Molecule, может где-нибудь копироваться полностью, ты ведь не определил свой конструктор копирования для него, значит компилятор сделал это за тебя, возможно ты где-то передаешь этот объект по значению, и этот конструктор вызывается и что-то идет не так
попробуй определить свой копирующий конструктор и оператор присваивания так -

Код

class Molecule
{
...
private:
   Molecule(Molecule const&);
   Molecule& operator = (Molecule const&);

если код по прежнему будет компилироваться, то проблема в чем-то другом smile 
PM MAIL Skype GTalk   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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