문제

가드가있는 헤더 파일에 정의 된 비 인라인 함수

#if !defined(HEADER_RANDOM_H)
#define HEADER_RANDOM_H 
void foo()
{
//something
}
#endif

결과 링커 오류 : 이미 정의 된 Other.Obj 파일에서 이미 정의 된 기능을 인라인으로 잘 작동하지만 첫 번째 경우 기능이 이미 오류가 발생한 이유를 이해할 수 없습니다.

도움이 되었습니까?

해결책

헤더가 하나 이상의 소스 파일에 포함되어 있고 함수가 "인라인"으로 표시되지 않으면 둘 이상의 정의가 있습니다. 포함 경비원은 동일한 소스 파일에 여러 개의 포함을 방지합니다.

다른 팁

당신은 위반하고 있습니다 하나의 정의 규칙. 헤더에서 직접 함수를 정의하려면 다음과 같이 표시해야합니다. inline - 함수를 여러 번 정의 할 수 있습니다. 또한 주목하십시오 inline 다른 의미는 없으며, 특히 컴파일러가 인라인 호출을 강요하지 않습니다 (대중의 신념과는 반대로).

인라인이 아니기 때문에 각 번역 장치에는 자체 기능 사본이있어 함수가 여러 번 정의됩니다.

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