1

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

4

1 回答 1

3

在不知道那个类的情况下,很明显它是无法复制的。错误信息很清楚:它的复制赋值运算符是私有的。这通常是为了避免复制而故意进行的。

从它的名字我猜它代表了一种真正的资源。复制对象是没有意义的,因为资源是唯一的。

我知道您真正需要的是您在构造函数中获得的对象。假设它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,您只需要使用非常量引用,一切都会正常工作。

于 2013-01-10T18:11:46.797 回答