VS2012에서 미리 컴파일 된 헤더를 사용하는 Qt 프로젝트가 있습니다 (관련이 있는지 확실하지 않음). 컴파일되어 제대로 작동합니다. 그러나 QtCreator에서 동일한 프로젝트를 컴파일하려고하면 오류가 표시됩니다. 우선, 두 프로젝트가 서로 일치하고 이전에 올바르게 구성되었습니다 (컴파일되고 잘 작동 함). 그러나 코드가 최근에 변경된 후에 뭔가 잘못되었습니다.'식별자'에는 이미 본문이 있지만 식별자를 찾을 수 없습니다.
오류 :
pch.h:34: error:C2084: function 'void handleExceptionByShowingMessage(std::exception &)' already has a body
main.cpp:16: error:C3861: 'handleExceptionByShowingMessage': identifier not found
이들은 (인라인도) pch.h에 정의 된 또 다른 기능을 가진 30 개 + 라인과 몇 가지 더 CPP 파일에 이동합니다. 그러나 모든 오류는 유사합니다. pch.h
에서
:
inline void handleExceptionByShowingMessage(std::exception &e)
{
QMessageBox msgBox;
msgBox.setText(QString::fromUtf16((ushort*)e.what()));
msgBox.setStandardButtons(QMessageBox::Discard);
msgBox.setIcon(QMessageBox::Warning);
int ret = msgBox.exec();
}
나는 그냥 정기적으로 사용 때문에 기능이 cpp
파일에서 호출 붙여 넣기하지 않습니다. 모든 cpp
파일은 정확히 pch.h
(첫 번째 코드 줄)을 포함하고 내가 말했듯이 VS2012 (코드 컴파일러는 실제로 QtCreator가 실제로 사용하는 ...)에서 정확히 동일한 코드 및 파일 구조가 작동합니다.
더 많은 코드/정보가 필요하면 알려주십시오.
업데이트 : 예, 모든 헤더가 #pragma once
있습니다. 비록 재미있는 고지 - 나는이 두 함수 정의를 더미 헤더 파일로 옮기고 pch.h
에 포함 시켰을 때, 프로젝트는 잘 컴파일되었다.
pch.h에 한 번 가드 보호 또는 #pragma가 있습니까? – slaphappy
물론입니다. 또한 내 질문에 대한 업데이트를 참조하십시오. – NPS
'pch.h '는 두 번 포함된다고 생각합니다. 파일을 파싱하는 동안 프리 컴파일 된 헤더를로드하는 동안 한 번,'#pragma once'는 agaisnt를 보호하지 않습니다. – slaphappy