C++ 返回类结构

C++ 返回类结构,c++,class,templates,C++,Class,Templates,我有一个模板类,其结构如下 //CFoo.hpp (header file) template <typename T> class CFoo { struct SFoo { T *ptr; /* rest is irrelevant */ } *foo; public: /* omitting irrelevant parts */ SFoo* get(); }; //CFo

我有一个模板类,其结构如下

//CFoo.hpp (header file)
template <typename T>
class CFoo {
        struct SFoo {
            T *ptr;
            /* rest is irrelevant */
        } *foo;

    public:
    /* omitting irrelevant parts */
    SFoo* get();
};
//CFoo.hpp(头文件)
模板
类CFoo{
结构SFoo{
T*ptr;
/*休息是无关紧要的*/
}*富;
公众:
/*省略不相关的部分*/
SFoo*get();
};
现在,如果我在头文件中实现方法SFoo*get(),一切都很好。但是,如果我将声明和定义分开,我的代码将停止处理以下编译错误

//CFoo.cpp (source code, example 1)
/* omitting irrelevant parts */
template <typename T>
SFoo* CFoo<T>::get() { return foo; } //ERROR HERE
//CFoo.cpp(源代码,示例1)
/*省略不相关的部分*/
模板
SFoo*CFoo::get(){return foo;}//此处出错
错误:
:错误:“SFoo”未命名类型

//CFoo.cpp (source code, example 2)
/* omitting irrelevant parts */
template <typename T>
CFoo<T>::SFoo* CFoo<T>::get() { return foo; } //ERROR HERE
//CFoo.cpp(源代码,示例2)
/*省略不相关的部分*/
模板
CFoo::SFoo*CFoo::get(){return foo;}//此处出错
错误:
:错误:在'CFoo::SFoo'之前需要'typename',因为'CFoo'是一个依赖范围


我期待着任何关于如何解决这个问题的提示。提前感谢。

您必须使用
typename
限定依赖类型。看


在类声明之外时,您需要完全限定
SFoo
typename CFoo::SFoo

通常,只要依赖于模板参数的名称是类型,就必须使用
typename

template <typename T>
typename CFoo<T>::SFoo* CFoo<T>::get() { return foo; }
模板
typename CFoo::SFoo*CFoo::get(){return foo;}
§14.6.2名称解析

模板声明或定义中使用的名称,即 假定依赖于模板参数不会命名类型,除非 适用的名称查找查找类型名称或名称为限定名称 通过关键字typename


您是否尝试按照上一个错误提示输入
typename
?@Timbo将此关键字放在何处?我想我的理解是正确的。现在所有C++需要做的是用关键字<代码>函数> /Cube >和<代码> var >代码>替换<代码> Auto <代码>,我们有一个好的语言。代码>变量x=1函数foo()->int{return 42;}
template <typename T>
auto CFoo<T>::get() -> SFoo* { return foo; }
template <typename T>
typename CFoo<T>::SFoo* CFoo<T>::get() { return foo; }