我試圖從它的模板容器類返回一個嵌套的模板對象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