我试图从它的模板容器类返回一个嵌套的模板对象C++嵌套模板的返回类型
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:\users\user\dropbox\visual studio projects\fooProj\fooProj\A.cpp(576): warning C4346: 'A<T>::[email protected][email protected]@' : 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
我错过了太明显的东西?
编辑:
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>*
@billz但'foo'不是嵌套模板。 – Angew
Try'template A :: template node * A :: foo()'(注意添加了'template',我猜是需要的,因为'A :: node'是一个独立的名字,编译器需要被告知,这是一个模板,以解析以下'') –
leemes