在另一个类函数中使用类的变量

时间:2012-07-10 05:14:47

标签: c++ qt class

我有这样的课程

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
}

通过单击A上的按钮并在新窗口中打开其对话框,从A类初始化C类。 我猜这一次我不会因为没有明确地提出我的问题而受到指责。对于神的名字请帮助我,因为我长期坚持这一点。非常感谢提前获得任何帮助。

2 个答案:

答案 0 :(得分:0)

我不熟悉QT,但我想这可能会有所帮助。如果你想在b或c类中使用class'A数据,有三个选项

  1. 如果关系是有意义的,则继承A类中的B和C类
  2. 在B类和B类中创建A类实例C(遏制)
  3. 通过类A的公共成员函数访问A类的数据,如

    public:

       map<int, QString> GetData()
       {
         return dataa;
       }
    

答案 1 :(得分:0)

  

对A :: dataa的未定义引用

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

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

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

  • 在A类的public部分声明此地图对象
  • 或者通过@Jeeva建议的函数返回此对象的副本。

现在,要以其他单位访问此变量,首先要包含A类的头文件。

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

要访问它:

void B::run() //and similar with C::run(..)
{
    A::dataa //do something with it ..
}