|
클래스 내의 멤버 변수로 static을 써주는 것이,
일반 함수 내에서 static을 써주는 것과 차이가 있어서 그런 것이군요.
알려주셔서 감사합니다. ^ㅡ^
곰곰히 생각해보니 정말 그럴 수밖에 없겠네요.
클래스의 모든 인스턴스가 static에 대해서는 하나의 변수를 공유해야 되니까,
클래스 자체가 static값을 포함하면 안 되고, 외부에 있는 값을 참조해야하는 것이군요.
며칠이나 고민하던 문제에 해답이 되었습니다. 감사합니다.
아래 있는 질문 중에 제가 올린 데코레이터 패턴 질문에도 똑같이 해당되겠군요.
암튼 감사! ^^
김태선 님이 쓰신 글 :
: 다른 분이 답을 이미 했는데 또 답을 달아 센스 없어 지송....
:
: 클래스 내의 static 변수 선언은 그 변수를 참조해서 쓴다는 의미이지 실제 그 변수를 클래스 내에 포함하겠다는 의미가 아닙니다.
: 그러므로 실제로 *.cpp 파일에 변수를 아래와 같이 정의해주지 않으면 당근히 링커 에러가 나지요.
:
: int Form1::myint;
: 또는
: int Form1::myint = 0;
:
: 부언하자면,
: 컴파일 에러를 만났을때 컴파일러 문제는 의심하지 않으셔도 됩니다.
: 이미 수십만명이 검증하다시피 한 것이므로.
:
: 쥐르미온 님이 쓰신 글 :
: : static으로 멤버 변수를 선언하였더니 컴파일까지는 잘 되는데 에러가 납니다.
: :
: : 제가 했던 대로 똑같이 한 번 해보세요.
: :
: : 헤더파일의 Form1선언부에서
: : private:( public:으로 하셔도 상관없습니다.)안에
: : static int myInt;
: : 라고 입력하시구요.
: :
: : 소스파일의 Form1 생성자에서
: : myInt = 3;
: : 이렇게 입력하세요.
: :
: : 그리고 컴파일 하세요.
: : 컴파일까지는 아주 잘 될 것입니다.
: :
: : 하지만, 링크 에러가 나버립니다. 이게 어찌된 일인지.
: :
: : 누구 아시는 분 없나요? 제 질문엔 답변이 안 올라오네요.
: : 안 되면, 넉두리라도 좀 부탁합니다~
|