정적멤버변수?
글쓴이: namola / 작성시간: 일, 2005/08/14 - 12:18오후
코드는 다음과 같습니다.
Quote:
class Test
{
public :
static int Member;
};int main ( void )
{
Test::Member = 100;return 0;
}
main함수에서 정적멤버 변수 선언할려고 하는데..
에러가 납니다.
Quote:
v.obj : error LNK2001: unresolved external symbol "public: static int Test::Member" (?Member@Test@@2HA)
Debug/aaa.exe : fatal error LNK1120: 1 unresolved externals
class Test { public : static int Member; }; int Test::Member = 100; int main ( void ) { return 0; }
이렇게 하면 아무문제가 없지만...
main함수에서 쓰려면 어떻게 해야하나요?
Forums:
[code:1]class Test { public &
이렇게 하시면 됩니다.
정적멤버변수는 어디든 꼭 한번 선언해야됩니다.
비슷하지만...
static 변수를 선언하셨으면 윗분이 말씀하신대로 꼭 한번 선언을 해 주어야합니다.
그 변수에 아무값을 주지 않더라도 소스에서 보시는 것처럼 선언이라도 해주셔야 된다는 겁니다.
클래스에서의 static변수는 모두 클래스 외부에서 선언해 주어야 합니다.
그 성질상 static변수는 전역변수와 같지만, 스코프만 클래스 스코프에 소속된 전역변수라고 보는 것이 타당합니다. 따라서 전역변수와 같은 위치에서 선언되는 것이지요.
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
Re: 비슷하지만...
예외적인 경우가 하나 있는데 정수형의 const static 멤버는 클래스 내부에서
정의할 수도 있습니다.
왜 부동형 같은 다른 타입의 멤버는 이런 식의 정의를 허용하지 않는지 모르겠습니다.
혹시 아시는 분 계십니까?
Re: 비슷하지만...
저도 매우 궁금합니다. :oops:
테스트해본 컴파일러입니다. gcc (GCC) 3.4.2 [F
테스트해본 컴파일러입니다.
gcc (GCC) 3.4.2 [FreeBSD] 20040728
gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
클래스 멤버를
static const float foo = 1.2345f;
로 했을 때 잘 동작합니다.
그런데, 여기서 static const char* = "test" 같은 것은 말씀하신 것처럼 에러 메시지가
error: invalid in-class initialization of static data member of non-integral type `const char*
이렇게 나옵니다. 이걸로 유추해보면 아마도 정수형만 되도록 하는 것이 표준이고 gcc 는 부동 소수점 타입까지 지원하도록 확장한 것이 아닐까 하는 의심(?)이 들기도 하는군요. doldori 님 컴파일러 환경은 어떤가요?
표준은 정수형 또는 열거형 멤버에 대해서만 상수 초기치를 허용하고 있습니
표준은 정수형 또는 열거형 멤버에 대해서만 상수 초기치를 허용하고 있습니다.
.NET 7.1과 HP GS320 SMP(이게 뭔지 저도 잘 모릅니다. -_-; 수퍼컴퓨터라는 것밖에는...
KISTI에 계정이 있어서 한 번 해봤지요.)의 컴파일러는 모두 그 외의 형에 대해서
에러를 내는군요. gcc는 확장인 것 같은데 매뉴얼에서는 관련 내용을 못찾았습니다.
In C++ .net
I'm not sure about other compilers, but MS C++ .net allows to declare it with initial value as following only if it's static.
class A {
...
public:
static int a=10;
static String* s="abcde";
...
}
Does it conforms standard?
Chester
댓글 달기