我正在使用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'是一个依赖范围
如果我在类中定义定义,那么它可以正常工作。但是我不想使其内联,应该怎么做?
正如编译错误提示使用 typename
template <typename T>
template <typename D>
typename C<T>::N *C<T>::fun(D d) {
}
Run Code Online (Sandbox Code Playgroud)