c++ - 简单的嵌套类

标签 c++ c++11

我有一个关于 C++ 中嵌套类的初学者问题。互联网上有很多关于此的信息,但我仍然无法让它在没有编译错误的情况下正常工作。我只是想从 A 类内部的函数返回内部类 B。

template<class T>
class A
{
      public:
      A();

      class B
      {
        public:
        B(){};
      };

      B getB();
};

template<class T>
A<T>::A(){}

template<class T>
B A<T>::getB{return B();}

当我这样做时,我收到错误“B 未命名类型”。我相信解决方案是使用 typedef class A<T>::B b_class; ,但我仍然遇到同样的错误。

谢谢!

最佳答案

您需要更改一些内容:将括号添加到函数定义中,限定外部 B与封闭类 ( A<T>:: ) 以及 typename 一起(必需的,因为类型取决于 A 的类型)并将返回更改为实际对象创建。

这里,在固定源中列出:

template<class T>
typename A<T>::B A<T>::getB() {return B();}
//^----------------------------------------------typename
//       ^---------------------------------------qualification
//                         ^---------------------parens
//                                     ^---------c-tor call

关于c++ - 简单的嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32741396/

相关文章:

c++ - 保存和加载非纯文本的文本文件

c++ - 拥有 constexpr 静态字符串会导致链接器错误

c++ - 我可以在 LockFileEx 之后复制文件吗?

c++ - std::sort 在第二个元素没有比较器的对上

c++ - 我确实需要一些帮助来创建显示信息的循环

c++ - std::unique_ptr<T[]> 带有派生对象数组,使用已删除函数

c++ - 通过const引用传递shared_ptr是线程安全的吗?

c++ - 在构造对象时定义成员函数

c++ - 两个不同的指针数组,但它们都指向同一个地址

c++ - c++ final 非虚拟类是否被重新解释为可以安全使用的数组?