2010-04-23 2 views
0

두 개의 헤더 파일 mainwindow.h 및 website.h가있는 프로젝트가 있습니다.기본 C++ 헤더 파일 질문

mainwindow.cpp 내부에서 website.cpp의 메소드에 액세스하려고합니다.

Window w를 실행하고 main- window에서 w-> function();을 사용하여 모든 함수에 액세스 할 수 있습니다.

그러나 기능이 메인 윈도우 내부에서 완료되면 w 용 메모리가 지워집니다.

내 머리글 파일에서 웹 사이트 w를 어떻게 선언합니까?

감사합니다, V의 $의 H3R

+0

아니요, 범위를 벗어나면 Window의 인스턴스가 사라집니다. 그것은 당신이 선언 한 곳에 달려 있습니다. Window 인스턴스의 함수를 호출해도 그 점에 아무런 영향을주지 않습니다 (일반적으로). .cpp 파일 이름을 혼합 할 때 약간 혼란 스럽습니다. 문제를 설명 할 때 클래스를 더 잘 사용하십시오. –

답변

1

것 같아요 당신의 website.h 인터페이스의 일종 (당신이 클래스를 사용하거나 네임 스페이스에서 기능을 그룹화하는 경우 나도 몰라,하지만 그 중요하지를) 선언해야 .

웹 사이트를 조작하도록 인터페이스를 선언 한 경우 window 구현의 메소드를 호출하기가 매우 쉽습니다. 헤더를 포함하고 사용하십시오. > MainWindow를 커플 링 만 MainWindow를 < 떠나 - - 웹 사이트 뭔가 잘못되면

, 당신은 더 나은 웹 사이트를 <를 제거/다른 프로그램 설계의 생각 것입니다.

죄송합니다. 귀하를 오해 한 경우, 문제에 대한 더 나은 설명을 제공해야합니다.

+0

비동기 웹 사이트에서 돌아 오는 데 시간이 걸리는 메서드가 있습니다. 다시 메인 윈도우에 연결하는 방법이 있습니까? 예를 들어 website-> get()이 끝나면 mainwindow 내부의 메소드를 호출하고 디스플레이를 업데이트하기를 원합니다. V $ h3r – Vsh3r

+0

작업이 비동기적일 경우 도움이 될 수있는 좋은 패턴이 있습니다. 메인 윈도우 구현 내에서 이벤트 큐를 추가하고 "웹 사이트"호출이 해당 큐에 이벤트를 추가하도록합니다. 그래서, 당신의 예제에 대해서, 나는 get() 메소드가 끝난 후에 EVENT_REDRAW라는 이벤트를 큐에 추가 할 것이다. 창의 업데이트주기에있는 창은 모든 대기열에있는 이벤트를 가져 와서 처리해야합니다 (이 경우에는 "창에 대기열에 EVENT_REDRAW 이벤트가 있으면이 이벤트를 비우고 다시 그려야합니다" –

+0

). winapi 응용 프로그램의 작동 방식입니다. 따라서 winapi 방식을 사용하는 경우 기본 창에 WM_PAINT 메시지를 게시하는 방법에 대해 생각하십시오. 물론이 방법을 사용하면 "웹 사이트"가 기본 창에 대해 알고 있어야하기 때문에 커플 링이 중단 될 수 있습니다. –

2

소리가 범위 지정 문제와 같습니다. thisthis을 읽으십시오.

또한, mainwindow 내 코드가 로컬 포인터 행운을 빕니다 (In depth background)

에 대한 참조를 반환하지 않습니다 있는지 확인하십시오!

+0

예, 범위 문제입니다. – Vsh3r

+0

내 mainwindow.cpp의 웹 사이트 w를 선언하면 mainwindow에서 w-> get()을 호출 한 후 HTML 내용으로 문자열을 저장할 수 있습니까? 감사합니다, V $ h3r – Vsh3r

+0

이것은 메인 윈도우 내부에서 어떻게 선언 하느냐에 따라 다릅니다 (이것은 extern을 사용하는 좋은 예입니다 : http://www.codersource.net/c/c-tutorials/c-tutorial-storage- specifiers.aspx) – Bolster