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 に答える