0

例:私が得た:「wrapper.h」

class wrapper : public QWidget
{
    Q_OBJECT
    public:
    Wrapped_class m_class;

    private:
    QTimer* m_timer;
}

「Wrapped_class.h」

class Wrapped_class
{
public:
Wrapped_class();
public slots:
f(); // slot which is called when m_timer send signal timeout()

}

「Wrapped_class.cpp」

Wrapped_class::Wrapped_class()
{
QOBject::connect(wrapper::m_timer, SIGNAL(timeout()), this, SLOT( f()))
}

ラッパー::m_timerにアクセスできないというエラーが表示されます

4

4 に答える 4

1

そのメンバーにアクセスするには、クラスにpointerまたはが必要です。ラップされているときにラップされたクラスにaを渡しますreferencenon staticpointer

あなたのにこのようなものを追加してくださいWrapped_class

void Wrapped_class::setWrapper(wrapper *w)
{
    m_wrapper = w;
}

オブジェクトがラップされているときにこの関数を呼び出します。コンストラクターで初期化m_rapperするnullptr

于 2012-08-16T08:52:54.717 に答える
1

目的とシステムの設計に応じて、次を選択できます。

  1. 「ラッパー」クラスのポインターまたは参照を「ラップされた」クラスに渡します。メンバーfriendにアクセスするには、ラッパー クラスを として定義する必要があることに注意してください。private
  2. 2 つのクラス間の相互作用を処理する「ラッパー」クラスのメンバー関数を記述します。(これは実際には制限に準拠していませんが、設計上の代替案です。)
于 2012-08-16T08:59:40.560 に答える
0

m_timerは静的メンバーではないため、そのようにアクセスすることはできません。あなたはそれWrapped_class.cppを使用するためにラップされたクラスのインスタンスが必要です

于 2012-08-16T08:53:43.310 に答える
0

wrapper::m_timer静的ではないという問題に加えて、プライベートでもあるため、Wrapped_classアクセスできません。プライベート メンバーにアクセスするにWrapped_classは、 のフレンドを作成する必要があります。wrapper

于 2012-08-16T08:58:03.383 に答える