Поиск:

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


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



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

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



Что-то я совсем ничего не понимаю. Есть у меня класс Atom
Код

namespace Chemistry
{
  class Atom
  {
  public:
    ...
    void bondWith(int index);
    
  private:
    ...
    QList<int> bondedIndexes_;
  };
} // namespace Chemistry


Привёл только ту часть, что по моему мнению имеет отношение к делу. 

bondedIndexes_ хранит индексы атомов, с которыми данный атом связан.

Метод bondWith(int index) вносит index в этот список:
Код

void Chemistry::Atom::bondWith(int index)
{
  bondedIndexes_.append(index);
}


Далее есть класс Molecule:
Код

namespace Chemistry
{
  class Molecule
  {
  public:
    ...
    void rebond();

  private:
    ...
    QList<Chemistry::Atom>* atoms_;
  };
} // namespace Chemistry


В методе rebond следующий код:
Код

void Chemistry::Molecule::rebond()
{
  for (int i = 0; i < atomsCount() - 1; ++i)
  {
    for (int j = i + 1; j < atomsCount(); ++j)
    {
      if (interatomicDistance(i, j) <
          atom(i).covalentRadius() + atom(j).covalentRadius() + tolerance)
      {
        atoms_->value(i).bondWith(j);
        atoms_->value(j).bondWith(i);
      }
    }
  }
}


Тут не суть важно условие, главное, что bondWith() вызывается.

Беда в том, что при каждом вызове bondWith() список bondedIndexes_ почему то оказывается пустым. В него добавляется index. Но при следующем вызове список снова пуст. И в конце вызова rebond() у всех атомов список bondedIndexes_ оказывается пустым. smile 

HELP!!!

Это сообщение отредактировал(а) kemiisto - 27.8.2009, 13:27


--------------------
PM MAIL WWW GTalk Jabber   Вверх
just_geek
Дата 27.8.2009, 13:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так это

Код

QList<Chemistry::Atom>* atoms_;

Мне кажется или нужно сделать так 

Код

QList<Chemistry::Atom*> atoms_;


update
а лучше, заменить 
Код

atoms_->value(i).bondWith(j);
// на
atoms_->at(i).bondWith(j);

так как value возвращает новый объект.

Это сообщение отредактировал(а) just_geek - 27.8.2009, 14:24
PM MAIL   Вверх
kemiisto
Дата 27.8.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(just_geek @  27.8.2009,  14:45 Найти цитируемый пост)
Мне кажется или нужно сделать так

Изначально было так:
Код

namespace Chemistry
{
  class Molecule
  {
  public:
    ...
    void rebond();
  private:
    ...
    QList<Chemistry::Atom> atoms_;
  };
} // namespace Chemistry


Код

void Chemistry::Molecule::rebond()
{
  for (int i = 0; i < atomsCount() - 1; ++i)
  {
    for (int j = i + 1; j < atomsCount(); ++j)
    {
      if (interatomicDistance(i, j) <
          atom(i).covalentRadius() + atom(j).covalentRadius() + tolerance)
      {
        atoms_.value(i).bondWith(j);
        atoms_.value(j).bondWith(i);
      }
    }
  }
}


Работает точно также. В смысле, не работает. smile 


Цитата(just_geek @  27.8.2009,  14:45 Найти цитируемый пост)

Код

QList<Chemistry::Atom*> atoms_;


Можно, конечно, попробовать. Не хочеться иметь список указателей. А это точно что-то изменит?

Цитата(just_geek @  27.8.2009,  14:45 Найти цитируемый пост)

так как value возвращает новый объект.

Разве? smile

Добавлено через 2 минуты и 59 секунд
Цитата(kemiisto @  27.8.2009,  15:50 Найти цитируемый пост)
Разве?

Тьфу! И верно! Надо доступ через [] использовать.
Код

atoms_[i].bondWith(j);


Это сообщение отредактировал(а) kemiisto - 27.8.2009, 14:51


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


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



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

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



Продолжаем КВН. smile 

Теперь такая беда. Есть такой вот класс:
Код

namespace Render
{
  class Viewer : public QGLViewer
  {
    Q_OBJECT
    ...
  protected:
    virtual void mousePressEvent(QMouseEvent* e);
    ...

  private:
    ...
    Chemistry::Molecule molecule_;
};


После того, как отработает конструктор по умолчанию, создаётся объект molecule_. У которого создаётся пустой список atoms_. Всё цивильно. Но стоит потом вызваться методу, скажем, mousePressEvent(), в котором есть такое место:
Код

Chemistry::Atom chemistryAtom; // создали атом
chemistryAtom.setProtons(atomicNumber_); // установили свойства
molecule_->addAtom(chemistryAtom); // пытаемся добавить

приложение падает. smile 

И писало что-то типа QList: Out of memory. А в режиме отладки напротив этого самого QList значилось <internal error>. Немного погуглив, я наткнулся на это

Переделал чуток, сделав Chemistry::Molecule* molecule_ ну и там в конструкторе явно вызываю:
Код

molecule_ = new Chemistry::Molecule();


Теперь оно падает просто без сообщений. А в режиме отладки напротив этого самого QList значицо <out of scope>.

HELP!!!


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


Опытный
**


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

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



А на каких строках падало в обоих случаях? Такое ощущение, что либо память портишь сам. Либо вызываешь функцию не созданного класса.
PM MAIL   Вверх
kemiisto
Дата 27.8.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(just_geek @  27.8.2009,  18:33 Найти цитируемый пост)
А на каких строках падало в обоих случаях? Такое ощущение, что либо память портишь сам. Либо вызываешь функцию не созданного класса. 

Падает он на:
Код

molecule_->addAtom(chemistryAtom);

а там собственно:
Код

void Chemistry::Molecule::addAtom(const Chemistry::Atom& atom)
{
  atoms_.append(atom);
}



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


Опытный
**


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

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



Код

molecule_->addAtom(chemistryAtom);

ну и чему в этом месте равно значение указателя?

molecue_ то к этому моменту создано?
PM MAIL   Вверх
kemiisto
Дата 27.8.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(just_geek @  27.8.2009,  18:46 Найти цитируемый пост)
ну и чему в этом месте равно значение указателя?

user posted image


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


Опытный
**


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

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



гхм

а если дальше внутрь функции 
Код

molecule_->addAtom(chemistryAtom); // пытаемся добавить


пройти ? может где то внутри падает?
PM MAIL   Вверх
kemiisto
Дата 27.8.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



just_geek, да там код то одна строчка:
Код

void Chemistry::Molecule::addAtom(const Chemistry::Atom& atom)
{
  atoms_.append(atom);
}

Падает при добавлении элемента. Если в debug'е - то останавливается на:
Код

    inline bool operator!=(int value) const
    {
        return _q_value != value;
    }

из qbasicatomic.h.


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


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



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

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



Пытался менять QList на QVector, std::list, std::vector. Никакой разницы. smile 


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


Кодофей
****


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

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



пересобири Qt(единственное что на ум пришло).


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


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



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

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



andrew_121, я уж на 3 разных сборках тестил на 3-х разных ОС'ях. Не работает. smile 


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


Шустрый
*


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

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



Попробуй atoms_.append(atom) заменить на:

Код

atoms_<<atom;

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


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



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

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



fearuth, пробовал уже. Это одно и тоже. И результат такой же.


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


Шустрый
*


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

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



Может глупость, но зачем знак "_" в конце имени? Попробуй без него. +)
PM MAIL   Вверх
kemiisto
Дата 28.8.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(fearuth @  28.8.2009,  15:27 Найти цитируемый пост)
Может глупость, но зачем знак "_" в конце имени?

Это я так private-члены обозначаю. Довольно распространённый способ. Это не повлияет ни на что. smile 


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


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



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

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



Up!  Помогите! smile 


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


Кодофей
****


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

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



Выложи весь проект куда-то. Если не секрет конечно smile 


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


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



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

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



andrew_121, не секрет. Если что-то из этого получиться оно будет Open Source. 

Если не жалко времени, конечно. 

Нужно собрать вот эту штуку. Ты ведь линуксоид. Если из сорсов соберёшь, пути в *.pro должны быть правильные.

От хлама вроде почистил...

Это сообщение отредактировал(а) kemiisto - 30.8.2009, 22:49

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


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


Кодофей
****


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

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



Цитата(kemiisto @  30.8.2009,  19:16 Найти цитируемый пост)
Ты ведь линуксоид.

Да. Но собиру под виндавз. Просто сейчас не могу перегрузиться.
Оно ведь кросс?



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


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



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

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



Цитата(andrew_121 @  30.8.2009,  20:21 Найти цитируемый пост)
Оно ведь кросс?

Ага. Только если для debug собирать - убери строчку
Код
CONFIG -= debug debug_and_release

из libQGLViewer-2.3.3\QGLViewer\. Собранную либу кинь QDalton\Libraries\, dll - в Binaries\Windows\.

Хотя ты лучше меня в этом смыслишь...


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


Кодофей
****


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

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



Цитата(kemiisto @  30.8.2009,  19:32 Найти цитируемый пост)
из libQGLViewer-2.3.3\QGLViewer\. Собранную либу кинь QDalton\Libraries\, dll - в Binaries\Windows\.

С этим я согласен. Но вот хидеры libQGLViewer и Eigen включать в поставку проекта не правильно. Это сторонние проекты.


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


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



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

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



Цитата(andrew_121 @  30.8.2009,  21:35 Найти цитируемый пост)
Но вот хидеры libQGLViewer и Eigen включать в поставку проекта не правильно. Это сторонние проекты.

Согласен, но речи о поставке пока не идёт. smile 

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


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


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



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

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



andrew_121, я дико извиняюсь. Не ту версию приаттачил. Перезакачай, если не напряжно. Там проблема из начала топика решена. Но атомы в молекулу не добавить...


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


Кодофей
****


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

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



kemiisto, Обновился.


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


Кодофей
****


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

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



 smile 
user posted image

Собрал с костылями. Приведу в порядок, выложу.


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


Кодофей
****


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

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



Как и обещал, выкладываю. Собрал - Win32-debug|release, Linux-release.
http://rghost.ru/430404

Вкратце. Проблема была не в коде, а в сборке. Нельзя для debug сборки использовать release библиотеки, и на оборот.

п.с.
Кто программу писал?

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


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


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



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

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



andrew_121,  smile Спасибо большое!


Цитата(andrew_121 @  31.8.2009,  07:22 Найти цитируемый пост)
Вкратце. Проблема была не в коде, а в сборке. Нельзя для debug сборки использовать release библиотеки, и на оборот.

Я так понимаю, проблема была в *.pro файле?

Цитата(andrew_121 @  31.8.2009,  07:22 Найти цитируемый пост)
Кто программу писал?

Это моя поделка. smile 


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


Кодофей
****


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

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



Цитата(kemiisto @  31.8.2009,  10:24 Найти цитируемый пост)
Я так понимаю, проблема была в *.pro файле?

Именно.

Цитата(kemiisto @  31.8.2009,  10:24 Найти цитируемый пост)
Это моя поделка. smile  

Удивительно... Тогда не понятно твое недовольство языком С++. Довольно высокое качество кода. Лучше большинства проектов выставленных на http://qt-apps.org/
Можешь смело размещать проект.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
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.1955 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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