2010-06-23 4 views
0

따라서#include가 무시됩니다.

나는이 코드를 업데이트하려고합니다. Visual Studio 6 용으로 작성되었으며 Visual Studio 2010에서 컴파일하려고합니다.

stdafx.h에서 stdafx.h에는 프로그램에 필요한 afx.h 및 afxwin.h가 포함되어 있습니다. 일하다. 특히, 다른 헤더 파일에는 CString을 사용합니다.

stdafx.h에 포함 된 맨 위에는 #pragma 메시지가 추가되어 먼저 컴파일되고 있는지 확인했습니다. 헤더 파일의 맨 위에는 오류가 발생하는 것도 있습니다. 컴파일러 출력에서 ​​stdafx.h가 먼저 컴파일되고 있다는 것을 알 수 있습니다.

그러나 오류가있었습니다. (CString은 형식으로 인식되지 못했습니다.) 그래서, 모든 내용을 처리했는지 확인하기로했습니다. 그래서 #include 뒤에 다른 #pragma 메시지를 넣었고 그 메시지는 인쇄되지 않습니다.

그 의미는 실제로 포함되지 않습니까?

+2

VS 6 회 CString이 클래스 였고 나중에 템플릿으로 변경되었습니다. 아마 그걸로 인해 무언가를 얻었을거야? 정확한 컴파일러 오류를 적절한 코드에 게시 할 수 있습니까? –

+1

일부 코드 스 니펫을 게시하십시오. –

+0

CString의 이전 버전 VS 6 변경 사항에 대한 초기 의견이 게시되었습니다. –

답변

0

답변에 내 의견을 전달합니다.

VS 6 회 CString이 클래스 였고 나중에 템플릿으로 변경되었습니다. 아마 그걸로 인해 무언가를 얻었을거야?

문제는 typedef를 CString과 함께 사용하는 것과 관련이있었습니다. Post VS 6, 그럴 수 없습니다. 방금 참조를 손으로 변경했으며 현재 을 컴파일합니다.

1

당신의 설명은 따라하기가 조금 어렵지만, 일반 컴파일과 미리 컴파일 된 헤더의 차이점에 대해 생각하고 있습니다.

미리 컴파일 된 헤더를 사용하면 컴파일러에서 첫 번째 파일을 정상적으로 처리합니다 (새 프로젝트 마법사가 stdafx.cpp를 설정합니다). 컴파일 사전 제어를위한 프로젝트 옵션에서 설정된 포함 파일 (일반적으로 stdafx.h)을 처리 한 후 컴파일러는 해당 상태를 .pch 파일에 저장합니다.

다른 모든 파일에 대해 컴파일러는 파일을 처리하지 않고 파일을 건너 뛰며 포함 파일을 찾습니다. 그런 다음 .pch 파일을 읽고 저장된 상태를로드 한 다음 파싱 및 정상적으로 컴파일을 계속합니다.

이 디자인의 한 결과는 stdafx.cpp에있는 #include "stdafx.h" 위의 모든 행이 상태의 일부가되어 다른 모든 파일에서 볼 수 있다는 것입니다. 그리고 다른 파일의 #include "stdafx.h" 위의 행은 무시됩니다.

+0

저를 때려 눕히세요. 내가 말하는 것은 stdafx.h에서 메시지를 인쇄하고 stdafx.h를 포함하는 파일을 컴파일 할 때이 메시지가 인쇄되지 않는다는 것입니다. stdafx.h를 다시 컴파일하지 않았기 때문입니다. stdafx.cpp를 컴파일 할 때부터 저장된 상태를 가져옵니다. stdafx.cpp 파일에 메시지가 표시되어야합니다. – Rup

+0

알아 냈습니다. 그것은 VS 6 이후 CString의 변경 때문입니다. 감사합니다. –

0

문제는 CString에서 typedef를 사용하는 것과 관련이 있습니다. 포스트 VS 6, 그건 불가능합니다. 나는 단지 참고 문헌을 손으로 바꾸었고 지금 컴파일한다.

+0

원래 게시물을 편집하면 답변이 게시되지 않습니다 ... '그냥 현지 에티켓입니다. :) – Goz

관련 문제