내 파일에 const 문자를 아래와 같이 추가했습니다. 내가 얻을 오류는 중복 기호 _xyz (말)입니다. 그것의 문제점은 무엇이며 어떻게이 문제에서 벗어날 수 있습니까? 이 헤더 파일에있는 경우중복 기호 오류 C++
const char* xyz = "xyz";
class Abc
{
public:
Abc()
{
}
};
내 파일에 const 문자를 아래와 같이 추가했습니다. 내가 얻을 오류는 중복 기호 _xyz (말)입니다. 그것의 문제점은 무엇이며 어떻게이 문제에서 벗어날 수 있습니까? 이 헤더 파일에있는 경우중복 기호 오류 C++
const char* xyz = "xyz";
class Abc
{
public:
Abc()
{
}
};
, 당신은 때마다 당신에게 #include
을 xyz
을 정의하고 있습니다.
@R Samuel Klatchko가 보여주는대로 선언을 변경할 수 있습니다. 일반적인 방법 (데이터가없는 경우 const
)이 같다 : Abc.h에서
: Abc.cpp에서
extern char *xyz;
:
char *xyz = "xyz";
편집
을 추가 할 수헤더 가드는 이 아니며은이 문제를 해결합니다.
#ifndef XYZ_H
#define XYZ_H
...
#endif
헤더 가드는 동일한 심볼이 같은 컴파일 장치에 두 번 나타나는 "재정의"오류를 방지합니다. 그건 컴파일러 오류입니다.
그러나 헤더 가드 인 경우에도 xyz
의 정의는 해당 파일을 포함하는 모든 소스 파일에 계속 나타나며 링커 오류 인 "중복 심볼"오류가 발생합니다.
원래 포스터가 언급 한 경우 더 도움이되었을 것입니다.
문제의 의미있는 설명을 제공해주십시오. "내 파일"은 무엇입니까? 무슨 "const 문자"당신에 대해 복용하고 있습니까?
지금까지 제공 한 내용에 대해 위의 정의 xyz
을 헤더 파일에 추가 한 다음 여러 번역 단위에 포함 시켰다고 추측 할 수 있습니다. 결과 : 객체 xyz
이 두 번 이상 정의되었습니다. 따라서 오류.
문제는 헤더 파일을 포함하는 모든 소스 파일이 외부 연결을 사용하여 xyz
의 자체 복사본을 얻는 것입니다.
가장 쉬운 방법은 xyz
내부 연결을 제공하는 것입니다.
+1 이상한 것은 가장 좋은 해결책입니다. 'const'는 항상 좋다. –
const는 확실히 좋지만, 지금은 모든 파일에서 동일한 데이터의 인스턴스가 있다는 문제가 숨겨져 있습니다. –
변수를 여러 번 선언하는 것은 동일한 변환 단위 내에 있지 않으면 오류가 아닙니다. 그것을 정의하는 것입니다. –
나는 그것을 붙잡아 야했다, 고마워. – egrunin
헤더 가드 설명에 감사드립니다. 하지만 이상한 일이 있습니다. 헤더에 정의 된 함수가 있으면 중복 된 심볼에 대해서만 링커 오류가 발생합니다. 내 현재의 경우에는 여러 개의 상수와 두 개의 함수가 헤더 내의 네임 스페이스에 정의되어 있습니다. 함수에 대한 링커 오류 만 가져오고 const는 괜찮습니다. 왜 그런가요? –