模板类中模板类的函数返回类型

Alo*_*lok 3 c++ templates

我正在使用c ++模板,并在模板类中创建了一个模板类。

情况是这样的:

template <typename T>
class C {
    public:
    class N {
        T v;
    };

    template <typename D>
    N *fun(D d);
};

template <typename T>
template <typename D>
N *C<T>::fun(D d) {
}

int main() {
    C<int> obj;
    obj.fun('c');
}
Run Code Online (Sandbox Code Playgroud)

现在编译器给出错误为:

main.cpp:14:1:错误:'N'没有命名类型

如果我在类外部使用函数原型 C<T>::N *C<T>::fun(D d),则编译器将给出错误:

main.cpp:14:1:错误:在'C :: N'之前需要'typename'是因为'C'是一个依赖范围

如果我在类中定义定义,那么它可以正常工作。但是我不想使其内联,应该怎么做?

eik*_*ike 5

正如编译错误提示使用 typename

template <typename T>
template <typename D>
typename C<T>::N *C<T>::fun(D d) {
}
Run Code Online (Sandbox Code Playgroud)

  • 最好不要参考评论。他们可以随时去。如果您想表达谢意,谢谢,但是感谢您写答案的那个人,而我应该为在评论中给出部分答案而感到难过;) (2认同)