c ++在第一个类的构造函数中创建第二个类的对象 - 多线程

时间:2011-03-08 07:45:51

标签: c++ multithreading class constructor qthread

我有两个班,一个和两个。两个都运行线程。第二类是对第一类中声明的函数进行线程化。这是通过在第二个类的run方法中调用它来完成的。我试图在一个构造函数中调用/启动线程2,以便这两个线程一起运行。 我得到范围错误。因为缺少语法。代码如下:

#include <QtGui>
#include<iostream>
using namespace std;
class One:public QThread
{
public:
    One()
    {
        Two b; // error: 'Two' was not declared in this scope error: expected ';' before 'b'
        b.start();//error: 'b' was not declared in this scope|
        b.wait();
    };
    void run();
    void beep();
};
void One::run()
{

}
void One::beep()
{

}
class Two:public QThread
{
public:
    Two()
    {

    };
    void run();
};
void Two::run()
{
    One a;
    a.beep();
}
int main(int argc,char* argv[])
{
    One a;
    a.start();
    a.wait();
    return(0);

}

代码旁边的注释中给出的错误是。

  

错误:此处未声明“两个”   范围

     

错误:预期';'在'b'之前

     

错误:'b'未在此声明   范围

我缺少什么语法?

2 个答案:

答案 0 :(得分:1)

您的错误是由编译器尝试实例化尚未声明的类/类型引起的。

您应该将声明和实现拆分为单独的文件,最好是广泛使用的.h和.cpp格式。然后在cpp中包含您需要它们的类型标题。

答案 1 :(得分:1)

嗯......我可能会遗漏一些东西,但似乎你的问题是,One的定义甚至看不到两个声明;将声明移动到头文件中,例如

第一课:公共QThread { 上市:     一();     void run();     void beep(); };

然后在.cpp中: 一一() {     两个b;     b.start();     b.wait(); };

与两个人类似。 这将使它建立;我不会对它进行评论,因为我对QT不是很熟悉