【发布时间】:2014-02-22 02:02:36
【问题描述】:
我正在尝试从其模板容器类返回一个嵌套模板对象
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() {
....
}
这是视觉工作室的错误
1> A.cpp
1>c:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.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:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.cpp(576): error C2143: syntax error : missing ';' before '*'
1>c:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.cpp(576): error C2065: 'T' : undeclared identifier
1>c:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.cpp(576): error C2923: 'A' : 'T' is not a valid template type argument for parameter 'T'
1>c:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.cpp(576): error C2923: 'A<T>::node' : 'T' is not a valid template type argument for parameter 'S'
1>c:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.cpp(613): error C2509: 'foo' : member function not declared in 'A'
1> c:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.h(11) : see declaration of 'A'
1>c:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.cpp(613): fatal error C1903: unable to recover from previous error(s); stopping compilation
我是否遗漏了一些太明显的东西?
编辑:
啊.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>*
【问题讨论】:
-
@billz 但是
foo不是嵌套模板。 -
试试
template <typename T> A<T>::template node<T>* A<T>::foo()(注意添加的template我猜是需要的,因为A::node是一个依赖名称,并且需要告诉编译器它是一个模板才能解析以下内容<T>)
标签: c++ class templates nested