У меня есть код, как это:Как вы определяете реализацию функции вложенного класса вне функции?
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