728x90
반응형
클래스에서 static 멤버 함수는 곧잘 사용하고 있어서 갑작스러운 에러에 갈피를 잡지 못했다.
하지만 멤버 변수의 경우는 함수와 다르다. 반드시 명시적인 선언이 추가적으로 필요하다.
class C
{
private:
static int a;
public:
C() { a = 1; }
void print() { cout << a << endl; }
};
단순 선언만 하면 컴파일 에러가 발생하지 않지만, a에 접근하려는 코드가 생길 경우 링크 에러가 발생한다.
class C
{
private:
static int a;
public:
C() { a = 1; }
void print() { cout << a << endl; }
};
int main()
{
C c;
c.print();
return 0;
}
그렇기 때문에, 아래와 같이 static int a는 다시 한번 선언해줘야 한다.
class C
{
private:
static int a;
public:
C() { a = 1; }
void print() { cout << a << endl; }
};
int C::a; // static 멤버 변수를 위한 선언
int main()
{
C c;
c.print();
return 0;
}
728x90
반응형
'Program Language > C & C++' 카테고리의 다른 글
[C++] packaged_task (2) | 2021.10.07 |
---|---|
[C++] thread_local (0) | 2021.10.07 |
[C++] recursive_mutex (0) | 2021.10.07 |
[C++] result_of (0) | 2021.10.06 |
[C++] Callable (0) | 2021.10.06 |