C 嵌套模板返回类型
C++ nested templates return type
我正在尝试从其模板容器类返回嵌套的模板对象
template <typename T>
class A {
template <typename S>
struct node {
S value;
struct node<S>* right;
....
};
private:
....
node<T>* foo();
}
我有
template <typename T>
A<T>::node<T>* A<T>::foo() {
....
}
这是Visual Studio的错误
1> A.cpp
1>c:usersuserdropboxvisual studio projectsfooProjfooProjA.cpp(576): warning C4346: 'A<T>::?$node@$RT@BAAB@' : dependent name is not a type
1> prefix with 'typename' to indicate a type
1>c:usersuserdropboxvisual studio projectsfooProjfooProjA.cpp(576): error C2143: syntax error : missing ';' before '*'
1>c:usersuserdropboxvisual studio projectsfooProjfooProjA.cpp(576): error C2065: 'T' : undeclared identifier
1>c:usersuserdropboxvisual studio projectsfooProjfooProjA.cpp(576): error C2923: 'A' : 'T' is not a valid template type argument for parameter 'T'
1>c:usersuserdropboxvisual studio projectsfooProjfooProjA.cpp(576): error C2923: 'A<T>::node' : 'T' is not a valid template type argument for parameter 'S'
1>c:usersuserdropboxvisual studio projectsfooProjfooProjA.cpp(613): error C2509: 'foo' : member function not declared in 'A'
1> c:usersuserdropboxvisual studio projectsfooProjfooProjA.h(11) : see declaration of 'A'
1>c:usersuserdropboxvisual studio projectsfooProjfooProjA.cpp(613): fatal error C1903: unable to recover from previous error(s); stopping compilation
我错过了太明显的东西吗?
编辑:
a.h
#ifndef TEMP_H
#define TEMP_H
template <typename T>
class A {
template <typename S>
struct node
{
S value;
struct node* right;
struct node* left;
};
private:
node<T>* removeWithTwoChildren();
};
template <typename T>
A<T>::template node<T>* A<T>::removeWithTwoChildren() {
A<T> temp = new A<T>;
return temp;
}
#endif
它不需要是一个结构,我也可以使用类。
我正在使用VC 2013。
我有问题的地方是在返回类型声明中
A<T>::template node<T>*
我想返回
node<T>*
好。我正在肢体踩踏,暗示这是您可能需要的:
template<typename T>
typename A<T>::template node<T>* A<T>::foo()
{
// your stuff goes here
}
如果您想知道那是从哪里来的,请看到此答案。约翰内斯(Johannes)是C 和模板领域中的绝对机器,坦率地说,忘记了对这种语言的了解比大多数人都知道知道 。阅读该帖子。您遇到的问题来自依赖的名称分辨率。您需要"告诉"编译器要遵循的事情也是一个模板。
相关文章:
- 嵌套 if 中没有返回评估
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++从外部类继承的嵌套类;不允许使用不完整的类型
- 嵌套模板函数采用 2 个具有相同内部类型的容器
- 受保护的嵌套结构不能用作派生外部类中的返回类型?
- 用于返回嵌套类类型的作用域解析运算符
- 使用模板化类型(嵌套模板类)的部分模板专用化
- 使用MPI/OpenMP的C 程序带有派生数据类型(嵌套类对象)容器
- 如何在模板类中使用嵌套的结构/类类型作为返回值
- 无效的协变返回类型,嵌套类C
- 嵌套模板类返回类型在 C++ 中的头文件中函数返回类型的语法
- C++嵌套类函数返回类型和命名空间
- C 嵌套模板返回类型
- 返回指向嵌套 std::vector 项的指针的最佳方法
- 嵌套迭代器和接口中的"无效协变返回类型"错误
- 为什么VC++2013拒绝编译嵌套类型,当用作模板函数返回类型时,用using关键字使其可见
- 嵌套类中的"无效协变返回类型"错误,该方法返回基于模板的对象
- 无效地使用不完整类型(嵌套类情况)
- 类型嵌套在模板化类中的部分专用化