Выделение памяти указателю класса

#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