문제
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 ++ '추가'인지 확실하지 않습니다.
제휴하지 않습니다 StackOverflow