문제

간단한 포함 파일에 문제가 있습니다.

포함되는 파일은 두 개의 MFC 프로그램에 있습니다. 그 중 하나는 DLL이며 MFC가 아닌 DLL로 컴파일합니다.

최근에 나는 더 큰 DLL을 사용하고 있었다. 원천 더 큰 DLL에 의해 노출되지 않은 원래 코드의 일부 기능에 액세스하고 싶을 때 더 작은 DLL 중.

이것은 테스트 였으므로 단순히 프로젝트에 소스를 추가하고 기능을 불렀습니다. 이 오류가 발생했습니다. 구문 오류 : ')') '이전'; ';'

파일은 올바르게 포함되어 있으며 소스 폴더에 .cpp와 .h가 모두 프로젝트 내에 있지만 컴파일되지는 않습니다.

나는 결국 매우 작은 테스트 프로젝트, main.cpp, spooler.cpp 및 spooler.h를 만들었습니다 (스풀러는 통신 주위의 래퍼입니다). 같은 문제.

그래서 나는 그것에 이상한 문제가 발생하는 경우를 대비하여 모든 DLL 관련 것들을 찢어 버렸습니다.

나는 내 삶을 생각할 수 없다. 다른 사람이 아이디어가 있습니까?

PS jeff 소스가 데이터로 너무 많은 화면을 채우기 때문에 파일을 첨부하는 기능을 추가해야합니다.

도움이 되었습니까?

해결책

이것은 파일을 포함하는 방식과 관련이 없습니다. 둥지를 묘사하지 않았기 때문에 얻는 구문 오류입니다. ( 그리고 ) 바르게.

다른 팁

/p 옵션을 사용하여 빌드하면 전처리 파일을 만듭니다 (일반적으로 .i Extension과 함께).

Visual Studio에서 옵션은 다음과 같은 프로젝트의 속성에 있습니다.

C/C++  -  Preprocessor  -   Generate Preprocessed File

이를 통해 매크로가 어떻게 확장되는지 정확히 알 수 있습니다. 구문 오류를 일으키는 정확한 줄을 찾으려면 컴파일러를 통해 .i 파일을 실행해야 할 수도 있습니다. 후 처리 된 파일을 읽는 것은 고통 일 수 있지만 무슨 일이 일어나고 있는지 보여 주어야합니다.

출처가 없으면 무슨 일이 일어나고 있는지 정확히 확신하기가 어렵습니다. 질문의 첫 번째 부분 에서이 특정 코드가 처음 사용 된 프로젝트에서 올바르게 컴파일되는 것처럼 보이지만 두 번째 프로젝트에 포함시 더 이상 컴파일되지 않습니다. 이 경우 다른 헤더가 포함 된 다른 헤더를 살펴보고 싶은 경우입니다. 때로는 기능 또는 변수 이름이 다른 헤더, 특히 Windows.h에 정의 된 것과 동일하면 이전에 문제없이 컴파일 된 코드에서 오류를 얻을 수 있습니다.

이 코드가있는 경우 절대 올바르게 컴파일 된 다음 다른 답변은 오프닝/클로싱을 확인하는 것을 제안합니다. "("아마도 시작 장소 일 것입니다.

컴파일러는 오류가 켜져있는 줄을 알려야합니다. 이전 "("해당 줄의 끝이 끝나기 전에 "를 검색하십시오.

무엇이 확장되는지 알아 내야합니다. 특히 id_spooler_event 란 무엇입니까? 불균형 괄호가 있다면, 그것은 당신의 범인입니다. 그렇지 않다면, Mike B의 조언을 가지고 가십시오. 이것은 나에게 전처리 문제처럼 보입니다.

사용중인 코드 :

// the only two includes
#include <windows.h>
#include "spooler.h"
// in WinMain
// create window then...
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);

SpoolerInitiallize( hwnd, ID_SPOOLER_EVENT ); // <-- our function
...

그리고 네, 나는 그것이 잘못된 철자가되었고 초기화라는 단어는 문서 전체에서 잘못된 철자가 잘못되었다는 것을 알고 있습니다. 불행히도 우리는이 DLL을 제 3 자에게 제공하므로 변경할 수 없습니다.

무엇을 시도하십시오 마이크 b 사전 처리기와 함께 말했습니다.

그 제안은 왜 그 오류가 왜 그렇게 친숙해 보이는지 상기시켰다. 나를 위해, 그것은 매우 짧았습니다 #define 그것은 변수 이름을 문자 그대로의 int 또는 그와 비슷한 것으로 바꾸는 것이 었습니다. 끔찍한.

사전 구균을 통해 코드를 실행하는 것은 내가 무슨 일이 일어나고 있는지 알아 낸 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top