1

私はこのようなクラスを持っています

class A : public QDialog
{
A(QWidget *parent);
static map<int,QString> dataa;
};

class B : public QThread
{
public void run();
}

class C : public QDialog
{
public void abc();
}

クラスの定義

void B::run()
{
in this function,i am using __dataa__ as __dataa.insert__which is defined initially in A class as public.
}

void C::abc()
{
in this function also,i am using __dataa__ as __dataa.find__ and dataa.end__ which is defined initially in A class as public.
}

今、他の2つのクラスBとCでその変数dataaを使用する方法を教えてくださいエラー。

これら 3 つのクラスは次のように初期化されます。

int main()
{
A window;
B datathread;
datathread.start
//B is Qthread inherited and A,C are QDialog inherited
}

クラス C は、クラス A のプッシュボタンをクリックして新しいウィンドウでダイアログを開くことにより、クラス A から初期化されます。今回は、質問を明確に定式化していないことで非難されることはないと思います.神々の名前で私を助けてください.私は長い間これに行き詰まっています.

4

2 に答える 2

0

A::dataa への未定義の参照

A の .cpp ファイルで定義する必要があります。言う:

std::map<int, QString> A::dataa;

また、これが他の場所でもアクセス可能であることを確認するには、2 つのオプションがあります。

  • publicこのマップ オブジェクトを A クラスのセクションで宣言します
  • または、@ Jeeva が示唆するような関数を介して返されるこのオブジェクトのコピーを持っています。

ここで、他のユニットでこの変数にアクセスするには、最初に A クラスのヘッダー ファイルをインクルードします。

#include "A.h" //or something similar..

それにアクセスするには:

void B::run() //and similar with C::run(..)
{
    A::dataa //do something with it ..
}
于 2012-07-10T05:25:12.550 に答える
0

私はQTに精通していませんが、これが役立つと思います。クラス b または c でクラス A のデータを使用する場合は、3 つのオプションがあります。

  1. 関係が意味のある場合は、クラス A からクラス B と C を継承します。
  2. クラス B & C 内にクラス A のインスタンスを作成する (コンテインメント)
  3. クラスAのパブリックメンバー関数を介してクラスAのデータにアクセスします

    public:

       map<int, QString> GetData()
       {
         return dataa;
       }
    
于 2012-07-10T05:22:29.753 に答える