c ++ создание объекта второго класса в конструкторе первого класса - многопоточность - PullRequest
0 голосов
/ 08 марта 2011

У меня есть два класса один и два. Оба запускают темы. Второй класс - это выполнение функции, объявленной в первом классе. это можно сделать, вызвав его в методе run второго класса. Я пытаюсь вызвать / запустить поток Two в конструкторе one, чтобы оба эти потока работали вместе. Я получаю ошибку области. Из-за отсутствия синтаксиса. код указан ниже

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

1 голос
/ 08 марта 2011

Хм ... Возможно, я что-то упускаю, но, похоже, ваша проблема в том, что определение Одного не видит даже объявления двух; переместите объявления в заголовочный файл, например

класс первый: общедоступный QThread { общественности: Один(); void run (); void beep (); };

и затем в .cpp: Один один() { Два б; b.start (); b.wait (); };

аналогично с двумя. Это заставит его строить; Я не буду комментировать это вообще, поскольку я не очень знаком с QT

1 голос
/ 08 марта 2011

Ваша ошибка вызвана попыткой компилятора создать экземпляр класса / типа, который не был объявлен.

Вы должны разделить вашу декларацию и реализацию в отдельный файл, предпочтительно широко используемый формат .h и .cpp. Затем включите заголовок типа в cpp там, где он вам нужен.

...