왜 이것이 불법이며 어떤 논리적 대안이 있습니까?간단한 C++ 선언 문제
// State.h
class State {
public:
int a;
int b;
State z; // <-- this is this problem
// ... Functions ...
};
감사합니다.
왜 이것이 불법이며 어떤 논리적 대안이 있습니까?간단한 C++ 선언 문제
// State.h
class State {
public:
int a;
int b;
State z; // <-- this is this problem
// ... Functions ...
};
감사합니다.
이 없기 때문에 포인터 상태 * Z이 허용됩니다 음, State
도 필요하므로 State
... 등의 인스턴스가 생성됩니다.
sizeof(State)
을 알아 내려고하면서 컴파일러를 무한 재귀로 보낼 수도 있습니다. 귀하의 컴파일러에 친절하십시오.
대신 포인터 유형을 유지하면 괜찮을 것입니다. 보조 메모에서 State
이 자신의 (공개) State
을 갖는 것이 실제로 의미가 있습니까? 당신이 싱글을 만들려면 생성자는 비공개로하고 정적 get_instance
기능을 추가하려고한다면 나는
if(state.z->z->z->z->z->z->z->z == some_state) {
// we found the right state!
}
... 나는 다음과 같은 코드의 라인을보고 사랑합니까하지만 말도 얻을 수있는, 의미있는 State
의 유일한 (정적 인) 인스턴스를 반환합니다.
LOL ur 설명 :-P – NirmalGeo
다른 대안으로'z'가'static' 저장 기간을 갖도록하는 것입니다. 이것은'State' 만 제안하는 경향이 있습니다. –
@ ta.speot.is : 나는 * 당신이 싱글 톤 시도에 대해 옳을 수도 있다고 생각합니다. –
비논리적 Z 모든 인스턴스 Z 그것에 등의 다른 인스턴스가되므로이 상태 Z의 무한대에서 끝날 때문이다. 이 허용 된 경우, 때마다 당신이 다음 만들고 State
의 인스턴스와 것 State
의 인스턴스를 생성 할 State
의 인스턴스를 생성하기 때문에이 그러한 제한
대신 State *
을 사용하십시오. 이렇게하면 어느 시점에서 재귀를 끝낼 수 있습니다.
z
은 로컬 변수이므로 전체 State
클래스를 검사 할 때까지 필요한 저장 공간의 크기를 알 수 없습니다. State
은 자체에 달려 있기 때문에 무한히 재발합니다. 기본적으로 여기
컴파일러에서 일어나는 내용은 다음과 같습니다 반면에
I see a class state. Okay!
I now see a member variable a. Okay! Let's add 4 bytes to the size of our state
I now see a member variable b. Okay! Let's add 4 bytes to the size of our state
I now see a State. Okay! Let's see, our current size is 4 + 4,
now let's add the size of State to that, which is... um... ????
포인터가 크기는 컴파일 타임에 알고
. (일반적으로 4 바이트,하지만 그 아키텍처에 따라 다름) 그런 식으로, 언제 돈 크기가 중요하지 않기 때문에 항상 크기를 알고 있습니다. 포인터를 사용할 수 있습니다.이 그 시점에서 컴파일러에서 일어나는 것입니다 :
I see a class state. Okay!
I now see a member variable a. Okay! Let's add 4 bytes to the size of our state
I now see a member variable b. Okay! Let's add 4 bytes to the size of our state
I now see a State*. Okay! Let's add 4 bytes to the size of our state
I now see that class state has ended. Its size is 4 + 4 + 4 = 12.
I can now do State z; It will take 12 bytes of space.
'const를 주 *'같아요 객체의 포인터를 유지하기 위해? – Rapptz
무한 재귀 때문에. 객체가 어떻게 자체의 객체를 포함 할 수 있습니까? –
* 왜 이것이 불법입니까? * 허용 된 경우,이 객체의 한 인스턴스가 얼마나 클지 생각해보십시오. –