문제

G ++에서 재현되는 문제가 있습니다. VC ++는 문제를 해결하지 못합니다. 그래서 2 개의 CPP 파일이 있습니다.

1.CPP :

#include <string>
#include <iostream>

extern const std::string QWERTY;

int main()
{
    std::cout << QWERTY.c_str() << std::endl;

}

2.CPP :

#include <string>
const std::string QWERTY("qwerty");

마법은 없다. 나는 단지 장소 문자열 상수를 분리 된 파일로 원한다. Link Time에서 Ld는 오류를 생성합니다. "_QWERTY '에 대한 정의되지 않은 참조" "첫 번째 선언을"extern "C"로 랩핑하는 첫 번째 생각은 도움이되지 않았습니다. 오류 및 비 C ++ _QWERTY가 여전히 있습니다.

제안해 주셔서 감사합니다

도움이 되었습니까?

해결책

아마도 당신이 아마도이 표준에 빠지는 것 같습니다.

C에서, 명시 적 스토리지 클래스 지정자가없는 파일 범위의 const- 자격 객체에는 외부 연결이 있습니다. C ++에서는 내부 연결이 있습니다.

2.cpp로 변경하십시오.

#include <string>
extern const std::string QWERTY("qwerty");

이 질문에서 "Linkage"가 무엇을 의미하는지에 대한 자세한 내용이 있습니다. C ++의 외부 연결 및 내부 연결이란?.

다른 팁

나는 그것을 찾아야하지만 const 글로벌 변수는 C ++의 내부 연결이 있다고 생각합니다. const 그리고 그것은 잘 컴파일 할 것입니다.

1.cpp

...
extern std::string QWERTY;
...

2.cpp
#include <string>
std::string QWERTY("qwerty");

또는 물론 공통 헤더에서 const 문자열로 선언/정의 할 수 있습니다.

불필요한 추가 extern 2.CPP에도 컴파일을 할 수 있지만 표준이거나 g ++ '추가'인지 확실하지 않습니다.

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