2
나는 다음과 같은 코드가 있습니다 함수 밖에서 함수 중첩 클래스의 구현을 어떻게 정의합니까?
class A {
void foo() {
class B {
void bar() { std::cout << "Bar!" << endl; }
};
B b;
}
};
그러나 나는 기능 범위의 구조체
B
외부를 구현하고 싶습니다. 이
A
단지 중첩 클래스라면 내가 좋아하는 뭔가를 할 수 :
class X {
void foo();
class Y;
}
class X::Y {
void bar() { std::cout << "Bar!" << endl; }
}
을하지만 클래스 B
에 대한 비슷한 일을 할 수있는 경우에는 내가 운동을 할 수 없다. 컴파일러는 그 클래스의 유형 A::foo::B
하지만 난 내가 foo
것을 이야기하고 그 클래스를 정의하려고하면 A
의 구성원이 아닌 것을 저에게 말한다 :
시도 :
class A {
void foo();
};
class A::foo::C {
void bar() { std::cout << "Bar!" << std::endl; }
};
void A::foo() {
class C;
C c;
c.bar();
}
오류 :
test.cpp(15) : error C3083: 'foo': the symbol to the left of a '::' must be a type
test.cpp(15) : error C2039: 'C' : is not a member of 'A'
test.cpp(6) : see declaration of 'A'
test.cpp(19) : error C2079: 'c' uses undefined class 'A::foo::C'
첫번째 예제에서'B' 클래스가 실제로'A' 클래스 안에 중첩되어 있지 않기 때문에 불가능합니다. 'A :: foo' 함수 내부에 로컬이므로 전체 정의가 그 함수 안에 있어야합니다. –
'B'가'bar' 메소드에 대해 로컬이기 때문에 불가능합니다. –
파일 스코프의 이름이없는 네임 스페이스에'B'를 넣습니다. – Jarod42