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; }