0

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

#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”

我缺少什么语法?

4

2 回答 2

1

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

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

于 2011-03-08T07:50:27.760 回答
1

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

类一:公共 QThread { 公共:一();无效运行();无效哔();};

然后在 .cpp: One::One() { Two b; b.开始();b.等待();};

与二类似。这将使它构建;我一般不会评论它,因为我对 QT 不是很熟悉

于 2011-03-08T07:54:57.760 回答