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.
}

现在请帮助我如何在其他两个类 B 和 C 中使用该变量 dataa。在某处我看到我们必须将其声明为静态并在 B 和 C 类中将其用作 A::data 但它不起作用并给出错误。

这三个类被初始化为

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

我不熟悉 QT,但我想这可能会有所帮助。如果要在 b 类或 c 类中使用 class'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 回答
0

对 A::dataa 的未定义引用

您需要在 A 的 .cpp 文件中定义它。说:

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

此外,为了确保在其他地方可以访问,有两种选择:

  • 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 回答