【问题标题】:C++ Nested Template ClassesC++ 嵌套模板类
【发布时间】:2018-11-08 05:05:08
【问题描述】:

如何使用“A”类的方法返回“B”类型?例如:

template <typename T> class A{

    //something

        template <typename V> class B{

        //something

        };

    B& foo(){
        B<T> y; //the variable must have the same type T of the father class (for my exercise)
        //something
        return y;
    }
};

主要:

A <int> o;
o.foo();

一旦我尝试编译它,它就会给我这些错误:

“在“B& foo()...”中“在没有参数列表的情况下无效使用模板名称 'A::B'”

"'class A' 没有名为 'foo' 的成员"

我在关闭B类后写了函数“foo”,所以可能是对的……

【问题讨论】:

  • 只是一个提示。在这里:B&amp; foo(){。这个错误很容易理解。
  • 在返回B 时不能省略模板参数,只有在你愿意返回A&lt;T&gt; 时才允许这样做(即Afoo 声明的模板参数相同)。你应该返回B&lt;T&gt;,而不仅仅是B

标签: c++ class templates nested


【解决方案1】:

您的代码存在三个问题:

  1. 缺少public 访问说明符。否则,foo() 将无法在 class A 之外访问。
  2. 您还需要将模板参数添加到返回类型,即将成员函数声明为B&lt;T&gt; foo()。更好的是,让编译器推断返回类型(适用于 C++14 及更高版本),所以只需编写 auto foo()
  3. 您正在返回对局部变量的引用,这会导致未定义的行为。只需将局部变量作为值返回,由于copy elision,您无需担心性能问题。

考虑到这一点,您的代码应该可以工作。

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 2017-02-05
    • 2018-04-22
    • 1970-01-01
    • 2019-02-25
    • 2018-02-06
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多