gpt4 book ai didi

c++ - 如何在函数外定义函数嵌套类的实现?

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:21 24 4
gpt4 key购买 nike

我有这样的代码:

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'

最佳答案

那是不可能的。名称 C 在函数 foo 的范围之外是不可见的。与类不同的是,现在可以从函数外部进入函数范围。

请注意,A 在您的示例中完全不相关。如果 foo 是命名空间范围的函数,则结果将完全相同。

如果你想要一个局部函数类,你必须完全在那个函数中实现它。

关于c++ - 如何在函数外定义函数嵌套类的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40019466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com