Используя 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
Без знания этого класса ясно, что его нельзя скопировать. Сообщение об ошибке совершенно ясно: оператор присваивания копии является закрытым. Обычно это делается специально, чтобы избежать копирования.
По его названию я думаю, что он представляет собой реальный ресурс; копировать объект бессмысленно, потому что ресурс уникален.
Я понимаю, что на самом деле вам нужен объект, который вы получаете в конструкторе. Предполагая, что это будет продолжаться до тех пор, пока 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
объект, вы просто должны использовать неконстантные ссылки, и все будет работать нормально.
Других решений пока нет …