Передача константной ссылки NavigationPane приводит к ошибке

Используя BlackBerry 10 Cascades, я создаю класс:

MyClass : public QObject
{
QObject
public:
MyClass(const bb::cascades::NavigationPane & navigationPane);
//...
protected:
bb::cascades::NavigationPane m_navigationPane;

В файле ccp у меня есть это в конструкторе:

MyClass::MyClass(const bb::cascades::NavigationPane & navigationPane)
{
m_navigationPane = navigationPane;

Когда я строю, это дает мне ошибку:

'bb::cascades::NavigationPane& bb::cascades::NavigationPane::operator=(const bb::cascades::NavigationPane&)' is private

1

Решение

Без знания этого класса ясно, что его нельзя скопировать. Сообщение об ошибке совершенно ясно: оператор присваивания копии является закрытым. Обычно это делается специально, чтобы избежать копирования.

По его названию я думаю, что он представляет собой реальный ресурс; копировать объект бессмысленно, потому что ресурс уникален.

Я понимаю, что на самом деле вам нужен объект, который вы получаете в конструкторе. Предполагая, что это будет продолжаться до тех пор, пока MyClass экземпляр, который вы создаете с его помощью, вы можете использовать ссылочный член в своем классе. Это может быть инициализировано только в списке инициализации конструктора следующим образом:

MyClass : public QObject
{
QObject
public:
MyClass(const bb::cascades::NavigationPane & navigationPane);
//...
protected:
const bb::cascades::NavigationPane& m_navigationPane;

И тогда конструктор будет:

MyClass::MyClass(const bb::cascades::NavigationPane & navigationPane)
: m_navigationPane(navigationPane)
{
//    m_navigationPane = navigationPane;

Конечно, если вам нужно изменить NavigationPane экземпляр изнутри вашего MyClass объект, вы просто должны использовать неконстантные ссылки, и все будет работать нормально.

3

Другие решения

Других решений пока нет …