传递NavigationPane的const引用将导致错误

Passing a const reference of a NavigationPane results in error

本文关键字:错误 引用 NavigationPane const 传递      更新时间:2023-10-16

使用BlackBerry 10 cascade,我创建了一个类:

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;

当然,如果你需要从你的MyClass对象内部实际修改NavigationPane实例,你只需要使用非const引用,一切都会正常工作。