【问题标题】:using a class's variable in another class function在另一个类函数中使用一个类的变量
【发布时间】:2012-07-10 05:14:47
【问题描述】:

我有这样的课程

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 初始化的。 我想这一次我不会因为没有明确提出我的问题而受到指责。请上帝帮助我,因为我长期以来一直被困在这个问题上。非常感谢任何形式的帮助。

【问题讨论】:

  • “它不工作并给出错误” - 错误是什么?同样一般来说,您不应该尝试从一个类到另一个类访问这样的数据,尤其是从线程中。相反,将数据从 A 类注入到 B 类。
  • 对 A::dataa 的未定义引用和另一个对 A::dataa 的未定义引用 collect2: ld 返回 1 退出状态我不知道注入方法。你可以编辑我的代码并粘贴它在你的答案中

标签: c++ qt class


【解决方案1】:

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

【讨论】:

  • 我必须将其声明为静态还是像 map dataa;
【解决方案2】:

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

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

    public:

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

【讨论】:

  • 在第三个中,我将在一个朋友函数中声明这个函数。它没问题。但它不会给出错误,因为函数是朋友而不是数据,所以我如何在其他类中使用它。第二个听起来最合适,您能否按问题进行编辑并将其发布在您的答案中以向我展示一般的做法?
猜你喜欢
  • 2012-06-06
  • 2014-10-06
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
相关资源
最近更新 更多