使用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

最佳答案

在不知道该类的情况下,显然无法复制该类。错误消息很清楚:其副本分配运算符是私有(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实例,则只需使用非const引用,一切都会正常进行。

10-08 03:55