"C++ primer"에는 클래스 선언과 정의에 관한 절이 있습니다. 나는이 문장에 대한 모든 것을 이해하지 못한다 :클래스가 정의 된 경우에만 데이터 멤버를 클래스 유형으로 지정할 수있는 이유는 무엇입니까? ("C++ primer"에서)
데이터 멤버는 클래스가 정의 된 경우에만 클래스 유형으로 지정할 수있다.
이 문장의 논리를 이해하지 못합니다. 데이터 멤버를 클래스 유형으로 지정하려면 어떻게합니까?이 작업은 무엇을 의미합니까?
"C++ primer"에는 클래스 선언과 정의에 관한 절이 있습니다. 나는이 문장에 대한 모든 것을 이해하지 못한다 :클래스가 정의 된 경우에만 데이터 멤버를 클래스 유형으로 지정할 수있는 이유는 무엇입니까? ("C++ primer"에서)
데이터 멤버는 클래스가 정의 된 경우에만 클래스 유형으로 지정할 수있다.
이 문장의 논리를 이해하지 못합니다. 데이터 멤버를 클래스 유형으로 지정하려면 어떻게합니까?이 작업은 무엇을 의미합니까?
은 클래스 타입 T
의 비 정적 클래스의 데이터 멤버 선언, T
complete는 것이 요구되는 것을 의미한다.
(
T
의 크기와 레이아웃이 알려 져야 할 때, 일반적.)
예컨대 반대로 한편
class foo; // forward declaration
class bar {
foo f; // error; foo is incomplete
};
,
class foo {}; // definition
class bar {
foo f; // fine; foo is complete
};
는 나는이 컴파일 것을 의미 믿습니다
class A
{
public:
A() {/* empty */}
};
class B
{
public:
B() {/* empty */}
private:
A myClassMember; // ok
};
을 ....하지만이되지 않습니다
class A; // forward declaration only!
class B
{
public:
B() {/* empty */}
private:
A myClassMember; // error, class A has only been declared, not defined!
};
당신은 A. –
또는 B의 대괄호 사이에 아무 것도 필요하지 않습니다. 의견은 항상 선택 사항이지만이 경우 독자는 독자가 독자가 뭔가를 버리고 잊어 버리려는 의도는 아니라고 생각할 수 있습니다. –
나는 C 클래스뿐만 아니라 A의 전체 클래스를 의미했습니다. 이 대답을 이해하려면 B에 _something_이 필요합니다. 구체적으로 A 유형의 필드이지만 A 내부에는 아무 것도 필요하지 않습니다. 또한 원래 의견이 분명하지 않지만 의견을 계산하지 않았습니다. 나는 당신이 실제 코드를 필요로하지 않는다는 것을 의미했다. –
그것은 member
의이 스펙이 유효하지 않음을 의미, A
선언되어 있기 때문에 정의되지 않음 :
class A;
class B {
A member;
};
허용되지 않는 한 가지 이유는 다음과 같습니다. se sizeof(A)
알 수 없습니다.
class A {
int value;
};
class B {
A member;
};
그리고이 A
가 (만 선언) 정의되지 않은 경우에도 유효합니다 member
클래스 유형이 아닌,하지만 포인터 타입 때문에, : A
가 정의되어 있기 때문에
이것은, 그러나, 유효합니다 :
class B {
A* member;
};
클래스 유형이하는'class' 또는'struct'로 표시되는 유형 인 내장 타입입니다. 문장은 해당 클래스가 정의 된 경우 (즉, 전달 선언되지 않은 경우)에만 클래스 유형이 될 수 있음을 의미합니다. 그러나 불완전한 유형에 대한 포인터 또는 참조를 가질 수 있습니다. –