0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
||||||||||||||||
1 | ||||||||||||||||
Как правильно передать вектор в функцию и вызвать эту функцию?28.08.2018, 20:56. Показов 2220. Ответов 20
Здравствуйте, объясните как исправить ошибку. Возникает после for(), выдается, что размер polygon = 0. Вот так функции объявлены в классе:
0
|
28.08.2018, 20:56 | |
Ответы с готовыми решениями:
20
Как правильно передать параметр в функцию? Как в функцию передать функцию, которая будет слотом? Как правильно передать вектор по ссылке? Как вызвать c++ функцию? |
279 / 88 / 37
Регистрация: 10.06.2015
Сообщений: 261
|
||||||
29.08.2018, 08:52 | 2 | |||||
Что сюда передаётся то хоть?
0
|
59 / 49 / 19
Регистрация: 16.06.2015
Сообщений: 206
|
|
29.08.2018, 09:00 | 3 |
А где использование счетчика i в цикле for?
Добавлено через 1 минуту возможно выход за границы массива
1
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
|
29.08.2018, 09:03 [ТС] | 4 |
void MyGraphicView::TestIntersection(QPolygon& polygon)
Сюда передается polygon с размером 0
0
|
279 / 88 / 37
Регистрация: 10.06.2015
Сообщений: 261
|
||||||
29.08.2018, 09:51 | 5 | |||||
А почему тут уже не 0 а 2? Ну и про n в цикле уже написали.
0
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
|
29.08.2018, 09:57 [ТС] | 6 |
n задумывалось как количество углов, к тому же это : PointInPoly(polygon, 2, x, y); - вызов функции. А почему там должно быть ноль?
Добавлено через 26 секунд n в цикле я поправил
0
|
279 / 88 / 37
Регистрация: 10.06.2015
Сообщений: 261
|
||||||
29.08.2018, 10:02 | 7 | |||||
0
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
|
29.08.2018, 10:04 [ТС] | 8 |
Вот именно про это и был вопрос: как передать полигон с размером 11?
0
|
59 / 49 / 19
Регистрация: 16.06.2015
Сообщений: 206
|
||||||
29.08.2018, 10:09 | 9 | |||||
А можно обойтись без n?
Заменить его на размер polygon.size() Добавлено через 1 минуту А еще - зачем выдумывать велосипед, если в классе QPolygon уже есть функция
1
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
|
29.08.2018, 10:16 [ТС] | 10 |
Потому что только начал изучать qt
Добавлено через 1 минуту Но все-таки как правильно передавать вектор здесь?
0
|
279 / 88 / 37
Регистрация: 10.06.2015
Сообщений: 261
|
|
29.08.2018, 10:20 | 11 |
Ну ты как-то передаешь пустой ( где-то вне приведённого кода)? Так же и передавай. Запихни в него точки предварительно, как делаешь в void MyGraphicView::CreatePolygon().
0
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
|
29.08.2018, 10:24 [ТС] | 12 |
Нет не передаю. Программа крашится на 1 цикле if.
0
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
|
29.08.2018, 10:31 [ТС] | 13 |
Даже если я вызываю CreatePolygon() в самом начале PointInPoly(), polygon все равно пустой
0
|
279 / 88 / 37
Регистрация: 10.06.2015
Сообщений: 261
|
|
29.08.2018, 10:32 | 14 |
Тебе про 2 и polygon.size() ещё раз написать? Мухи с котлетами не смешивай. У тебя проблема не с тем, как передать условный "полигон с размером 11", а с тем, что ты упорно игнорируешь количество точек в полигоне и пытаешься извлечь нулевую и первую точку из пустого полигона.
0
|
59 / 49 / 19
Регистрация: 16.06.2015
Сообщений: 206
|
|
29.08.2018, 10:33 | 15 |
Ошибка - выход за границы массива.
Твоя проблема в том, что в функции void MyGraphicView::CreatePolygon() ты создаешь полигон, заполняешь его данными, а потом этот полигон запихиваешь в сцену. Далее ты пытаешься вызвать функцию PointInPoly(polygon, 2, x, y); в которую передаешь какой-то непонятный polygon, который нигде заранее не был заполнен данными. Передавай в PointInPoly либо полигон из scene, либо вынеси этот полигон выше из функции CreatePolygon на уровень самого класса.
1
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
||||||
29.08.2018, 10:45 [ТС] | 16 | |||||
Теперь n=polygon.size(); и да все работает.
Можно сразу вопрос: как передать polygon из scene?
0
|
59 / 49 / 19
Регистрация: 16.06.2015
Сообщений: 206
|
|
29.08.2018, 10:59 | 17 |
Для этого лучше сохранить ссылку на него.
Например, функция addPolygon возвращает QGraphicsPolygonItem*, который можно где-либо сохранить в переменной класса, а затем уже обращаться к ней. Либо организовать в классе MyGraphicView вектор QVector<QGraphicsPolygonItem*> polygons; в который помещать указатели на все добавленные в сцену полигоны, например так polygons.append(scene->addPolygon(polygon)); и уже через этот вектор обращаться к полигонам
0
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
|
29.08.2018, 11:07 [ТС] | 18 |
То есть обращение к точке polygon будет примерно следующим: polygons.polygon.at(i).x()?
0
|
59 / 49 / 19
Регистрация: 16.06.2015
Сообщений: 206
|
||||||
29.08.2018, 11:18 | 19 | |||||
Что-то вроде такого должно быть
Добавлено через 1 минуту чтобы было яснее QPolygon polygon = polygons.at(num).polygon().toPolygon(); а затем уже polygon.at(i).x()
0
|
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 37
|
|
29.08.2018, 11:20 [ТС] | 20 |
при этом он ругается на polygon - class QPoint не содержит члена polygon
0
|
29.08.2018, 11:20 | |
29.08.2018, 11:20 | |
Помогаю со студенческими работами здесь
20
Как вызвать функцию в дочерней форме Как вызвать функцию в Qt с переменной, которая берется из другой формы? Как передать указатель на виджет в функцию? Как в Qt передать указатель на CallBack функцию WinAPI ? :-) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |