헤더 파일 내에 함수를 정의했습니다. 디버그에서는 잘 컴파일되고 연결됩니다. 릴리스에서는 헤더를 포함하는 모든 클래스의 모든 개체 파일에 대해 " 'blah :: blah (blah & blah)'의 다중 정의"라는 컴파일 오류가 발생합니다.
gcc-4.8.1을 사용하고 있습니다. 실제 코드를 게시 할 수 없습니다.이 버전에는 무고한 사람을 보호하기 위해 이름이 변경되었습니다.
#ifndef INCLUDE_SMELLS_FUNNY
#define INCLUDE_SMELLS_FUNNY
#include "ParentClass.h"
#include "ChildClassA.h"
#include "ChildClassB.h"
namespace someplace {
bool smellsFunny(const ParentClass& someData) {
// All ChildClass As smell funny
if(dynamic_cast<const ChildClassA*>(&someData)) {
return true;
}
// If ChildClass B, need to check if smells funny
const ChildClassB* childB = dynamic_cast<const ChildClassB*>(&someData)
if(childB) {
return childB->MoreThanAWeekOld();
}
// Default is smells OK
return false;
}
}
#endif // INCLUDE_SMELLS_FUNNY
나는 어떤 gcc 플래그가 책임이 있는지 찾을 수 없었습니다. 물론 수정은 구현을 cpp 파일로 옮기는 것입니다. 그러나 이것이 왜 필요합니까? 이것이 릴리스에서만 발생하는 이유는 무엇입니까?
정확히 말할 수는 없지만 디버그 모드에서는 함수가 인라인 함수로 간주됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다