Неправильная интерпретация среды выполнения объектов Visual StudioC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неправильная интерпретация среды выполнения объектов Visual Studio

Сообщение Anonymous »

Существует два проекта C++ — решение для автоматической торговли и приложение модульного/регрессионного тестирования — использующие одну и ту же пользовательскую библиотеку C++ с использованием платформы Qt. Приложения раньше работали, а теперь нет.
Ни исходный код проекта, ни исходный код библиотеки не менялись до возникновения проблемы. Очевидная проблема в любом приложении не такая же, как в другом приложении, но, похоже, основная причина та же.
До появления проблем я установил cygwin с установка по умолчанию, за исключением добавления g++, очистки решения и повторной сборки, поэтому я считаю, что вероятным виновником является установка cygwin. В переменных PATH нет видимых изменений. С тех пор я удалил Cygwin, но проблема(ы) сохраняется.
При запуске тестового проекта я получаю сообщение о нарушении доступа на чтение.
Пожалуйста, посмотрите следующий код из проект модульного/регрессионного тестирования:

Код: Выделить всё

void TradeToolsTest::initTestCase(void)
{
QSharedPointer spy                             = TradeToolsTest::parentLists->getUnderlyingAsset("SPY");

QSharedPointer bar30 = QSharedPointer(new QMap);

// Convert the bars from JSON to a list of Bars
QSharedPointer tempBar                = api->jsonArrayToItemArray(this->mockData["bars"]["spy"]["minute"]["30"].array(), (processJSONObject)TradeTools::Financial::jsonToBar, TradeToolsTest::parentLists);

// Insert the bars into the expected container type
for(QVector::iterator itBar=tempBar->begin(), endBar=tempBar->end(); itBar!=endBar; itBar++)
bar30->insert((*itBar)->timestamp, *itBar);

// Add the bars to the asset
spy->addBars(timeframe30, bar30, TradeToolsTest::state, adequateBarCount, TradeToolsTest::parentLists, TradeToolsTest::internalComm, TradeToolsTest::barAdded);
}

bool OQIAsset::addBars(const BarTime barTime, const QSharedPointer bar, const QSharedPointer appState, bool &adequateBarCount, const QSharedPointer
 parentLists, const QSharedPointer internalComm, const BarAdded realBarAdded)
{
return TradeTools::Financial::addBars(this, barTime, bar, this->strikeIncrement, appState, adequateBarCount, parentLists, internalComm, realBarAdded);
}
Примечание: класс UnderlyingAsset является производным от класса OQIAsset.
Выше приведена минимальная версия кода, объясняющая проблему.
Если мне установить точку останова в операторе return внутри функции OQIAsset::addBars и добавить bar.value в окно просмотра, свойство QMap::size будет иметь огромное значение , вместо ожидаемое значение «200». Когда я перемещаюсь назад по стеку вызовов к вызывающей функции «TradeToolsTest::initTestCase» и добавляю «bar30.value» в окно просмотра, свойство QMap::size равно «200», как и ожидалось. Указатель общего объекта имеет тот же адрес.
Изображение
< /p>
Типы объектов те же, за исключением того, что тип вызываемой функции — const. Удаление const приводит к той же проблеме. Я сомневался, что это решит проблему, поскольку ее не было. изменения кода до проблемы появляется.
Проблема приложения торгового бота заключается в том, что библиотека Qt ошибочно полагает, что экземпляр QApplication не был создан до создания экземпляра QWidget. См. следующий код:

Код: Выделить всё

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Systematic w;

w.show();

return a.exec();
}

Systematic::Systematic(QWidget *parent)
: QMainWindow(parent)
{
Systematic::initUI();
}

void Systematic::initUI(void)
{
Systematic::profitLossChart = new LineChartView;
}
Ошибка: «QWidget: необходимо создать QApplication перед QWidget».
[img]https:/ /i.sstatic.net/oJX3sxNA.png[/img]

Версия Visual Studio: Community 2022 17.12.3
Версия Qt: 6.8.1, использование msvc2022_64
ОС: Windows 11
Я обновил Qt с 6.7.2 до 6.8.1 и обновил Visual Studio до последней версии, но проблемы по-прежнему сохраняются.
Как упоминалось выше, я очистил и пересобрал решение (включая ручное удаление папок debug/x64 из каталог проекта.), я удалил cygwin и проверил переменные PATH на наличие очевидных новых записей.
Я ценю любую помощь, которую вы можете предоставить.

Подробнее здесь: https://stackoverflow.com/questions/792 ... rpretation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»