2011-03-08 3 views
0

두 가지 클래스가 있습니다. 둘 다 스레드를 실행합니다. 클래스 2는 클래스 1에 선언 된 함수를 스레드하는 것입니다. 이 작업은 두 번째 클래스의 run 메소드에서 호출하여 수행됩니다. 두 스레드가 함께 실행되도록 하나의 생성자에서 두 번째 스레드를 호출/시작하려고합니다. 구문이 누락되어 범위 오류 .due가 표시됩니다. 코드는 아래에 주어진다C++ 퍼스트 클래스의 생성자에서 두 번째 클래스의 객체 생성 - 멀티 스레딩

코드 옆에있는 주석에 제공된 오류가 있습니다.

error: 'Two' was not declared in this scope

error: expected ';' before 'b'

error: 'b' was not declared in this scope

누락 된 구문은 무엇입니까?

+0

이 프로그램의 실제적인 해결책은 Erik에 의해 제공되었다. http://stackoverflow.com/questions/5230444/c-qthread- starting-2-threads-concurrently –

답변

1

오류는 컴파일러가 선언되지 않은 클래스/유형을 인스턴스화하려고 시도했기 때문에 발생합니다.

선언과 구현을 별도의 파일, 바람직하게는 널리 사용되는 .h 및 .cpp 형식으로 분리해야합니다. 그런 다음 필요에 따라 cpp에 유형 헤더를 포함시킵니다.

+0

이것은 빌드 오류를 제거하는 것 같습니다. –

+0

다른 소스 파일로 분할하려고 했습니까? – YeenFei

+0

예, 빌드 오류가 제거되었습니다.이 문제의 해결 방법은 [this] (http://stackoverflow.com/questions/5230444/c-qthread-starting-2-threads-concurrently)입니다. –

1

음 ... 나는 뭔가를 놓친 것일 수도 있지만, 문제의 사람처럼 하나의 정의가 2의 선언조차도 보이지 않는다는 것입니다. 선언을 헤더 파일로 옮깁니다.

클래스 1 : 공개 QThread { public : One(); void run(); void beep(); };

다음에 .cpp : 하나 :: 하나 ( ) { 두 개 b; b.start(); b.wait(); };

도 2와 비슷합니다. 이렇게하면 빌드됩니다. 나는 QT에 익숙하지 않은만큼 일반적인 질문에 답변하지 않을 것이다

관련 문제