#c #qt #pointers #qt-mobility
#c #qt #указатели #qt-мобильность
Вопрос:
QGeoRoutingManager:http://apidocs.meego.com/1.0/qtmobility/qgeoroutingmanager-members.html
У этого класса нет конструктора. Я забыл способ выделения памяти для его указателя.
Я сделал:
QGeoRoutingManager *a = new QGeoRoutingManager ();
Это приводит к ошибке:
calculateRoute.cpp:16: error: no matching function for call to ‘QtMobility::QGeoRoutingManager::QGeoRoutingManager()’
../../../../tarBalls/qt-mobility-opensource-src-1.2.0/install/include/QtLocation/qgeoroutingmanager.h:91: note: candidates are: QtMobility::QGeoRoutingManager::QGeoRoutingManager(const QtMobility::QGeoRoutingManageramp;)
Что я должен передать туда, согласно сообщению об ошибке «const QtMobility::QGeoRoutingManager amp;»
Ответ №1:
Это одноэлементный класс, вы можете получить к нему доступ следующим образом:
QGeoServiceProvider::routingManager().
Проверьте документы
Ответ №2:
Если у класса нет общедоступного конструктора (по умолчанию), вы не можете (напрямую) создать его новый экземпляр ни в стеке, ни в свободном хранилище (куче). Возможно, вы могли бы создать только копию существующего, но в документах не указан доступный ctor для копирования.
Просмотрите документацию, существует ли заводская функция / класс для создания экземпляров этого класса.
Ответ №3:
У класса QGeoRoutingManager
нет конструктора по умолчанию. Конструктор по умолчанию — это тот, который не принимает никаких аргументов. Если это требуется, то они необязательны (со значением по умолчанию).
Комментарии:
1. Да, у него есть один, но ошибка ясно показывает, что он не является общедоступным.
2. @Xeo: Я не вижу, чтобы в этой ошибке это было четко указано. Можете ли вы мне помочь?
3. @Nawaz: Поскольку каждый класс автоматически получает ctor по умолчанию, если он не может его найти, он должен быть закрытым.
4. @Xeo: НЕТ, не каждый класс автоматически получает ctor по умолчанию. Если вы определяете ctor, который принимает параметр, то компилятор не генерирует ctor по умолчанию для вас.
5. @Nawaz: Прекратите редактировать свои комментарии, чтобы они имели совершенно другой смысл. ;P
Ответ №4:
У класса действительно есть конструктор; у всех классов есть конструктор. Очевидно, у класса нет конструктора по умолчанию. Вы не показываете нам класс, поэтому мы должны догадаться, но из сообщения об ошибке следует, что у класса действительно есть конструктор копирования. Вы это предоставили? Как только появятся какие-либо пользовательские конструкторы, компилятор не будет генерировать конструктор по умолчанию; вы также должны предоставить один из них.
Комментарии:
1. Вы «пытались» щелкнуть по ссылке в моем первом сообщении?
Ответ №5:
Я думаю, вам нужно QGeoRoutingManager * QGeoServiceProvider::routingManager () const
Проверьте здесь:https://doc-snapshots.qt.io/qt-mobility/qgeoserviceprovider.html