QString очищает при переходе к функции

0

У меня есть проект, написанный с QT. Пока что я тестировал его в Windows без проблем. Сегодня я попытался перенести его в Linux

Я загрузил исходное дерево Qt из qt.gitorius.org. На данный момент он имеет версию 5.2.2. Он скомпилирован и установлен без проблем. Программа также скомпилирована без проблем. Но во время работы была проблема. Во время отладки я обнаружил странное поведение. Вкратце в коде:

Config::Config()
{
    p_path = QApplication::applicationDirPath();
    if(!p_path.endsWith(QDir::separator())) p_path += QDir::separator();
    QString path = p_path + "Settings/config.xml";
    settings = new Settings(path,this); // here path is /opt/myprog/Settings/config.xml
}
Settings::Settings(const QString file, QObject * parent) : QObject(parent)
{
    p_file = file; // file is empty here!!!!   
    p_initialized = false;
    p_autosave = true;
    p_changed = false;

}

Когда я передаю значение QString, функция теряет его значение.

Я проверил тот же код в Windows, и он работает без проблем.

Моя система:

  • Ubintu 13.10 64 бит
  • Gcc 4.8.1
  • Qt 5.2.2 (git)
  • 0
    Я действительно не могу понять, что происходит с моим проектом.
  • 0
    Мой проект сошел с ума. Отладчик показывает неправильные значения, например 186 для логического значения, которое было инициализировано с помощью true . Некоторые переменные класса выглядят удаленными, но они были созданы и инициализированы ранее. Поэтому, когда я пытаюсь получить это, происходит сбой программы.
Показать ещё 1 комментарий
Теги:
qt
qstring

1 ответ

1

Нет ничего плохого в коде, который вы показываете, за исключением того, что вы хотите передать ссылку на константу, но это не причина проблемы. Конструктор Settings должен иметь следующую подпись:

Settings::Settings(const QString & file, QObject * parent)

Вы должны повторно запустить qmake в проекте, очистить и перестроить его, и повторите попытку. Если он все еще не работает, тогда у вас есть ошибка памяти, и смена платформы просто вызывает скрытую ошибку в вашем коде.

  • 0
    Да, справочник работает. Но почему передача по значению работает в Windows, а не в Linux? И другие проблемы - похоже, код x86 и x64 был смешанным, но я дважды его проверил. Qt был скомпилирован как x64.
  • 0
    @folibis Любой из них должен работать. У вас есть другие ошибки, которые просто проявляются в этом месте в коде, но они не связаны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню