1
저는 C++을 객체 지향 프로그래밍에 사용하기 시작했고 정적 멤버 변수를 발견했습니다. 중요하지만, 어떤 예처럼 유효하지 않는 것이 정말정적 멤버 변수
private:
const static string DEFAULT_PATH;
static string path;
: 내 특정 경우
, 나는 내 헤더 파일 (Class.hpp)에 다음있다.
그래서 적절한 초기화 작업을 수행하려면 클래스 바디에서 수행 할 수없고 소스 (Class.cpp) 파일에서 수행해야한다는 것을 알아야합니다. 내 소스 파일에 다음을 추가했습니다.
const string Class::DEFAULT_PATH = "./";
string Class::path = DEFAULT_PATH;
나는 직관력이 떨어지지 만 처리하려했습니다. 그럼 궁금 해서요 :
언제 컴파일러가이 초기화 코드를 호출 했습니까? 이 필드에 언제 값이 있다고 가정 할 수 있습니까? 나는 그곳에서 일어나는 일을 정말로 이해하지 못하고 알고 싶습니다.
내게 가장 흥미로운 점은 class.hpp를 포함 할 때 어떤 기호가 Class.cpp에서 볼 수 있습니까? 그리고 왜 그 선언문이 계급 체외와 다른 파일에 있는가?
'main' 전에 초기화됩니다. 그 전에 어떤 명령도 세지 마십시오. 그리고 * 정의 *는 .cpp에 들어가야 당신이 One Definition Rule을 위반하지 않아야합니다. – chris
컴파일러는 .cpp 파일을보고.을 포함하는 파일은 .h 파일 내용이있는 .cpp 파일의 선행 처리기로 대체됩니다. – 101010
가능한 복제본 : http://stackoverflow.com/q/1421671/1227469 – JBentley