문제
간단한 포함 파일에 문제가 있습니다.
포함되는 파일은 두 개의 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 또는 그와 비슷한 것으로 바꾸는 것이 었습니다. 끔찍한.
사전 구균을 통해 코드를 실행하는 것은 내가 무슨 일이 일어나고 있는지 알아 낸 방법입니다.