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

using a class's variable in another class function

本文关键字:一个 变量 类函数 另一个      更新时间:2023-10-16

我有这样的类

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。我想这一次我不会因为没有明确地提出我的问题而受到指责。请上帝的名字帮助我,因为我已经被困了很长时间了。提前非常感谢你的帮助。

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

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

  1. 如果关系有意义,则从类A继承类B和C
  2. 在类B&C(安全壳)
  3. 通过A类的公共成员功能(如)访问A类的数据

    public:

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