【发布时间】:2020-11-26 10:40:47
【问题描述】:
考虑以下声明
template<class T, int N>
class Stack
{
public:
Stack() : T[N]{} {};
class iterator;
iterator insert(iterator it, const T &v);
private:
T[N];
};
template<class T, int N>
class Stack<T,N>::iterator
{
...
};
我想在课外实现Stack::insert,所以我尝试了以下
template<class T, int N>
Stack::iterator Stack<T, N>::insert(Stack::iterator p, const T &v)
{
...
}
现在我收到以下错误
'Stack' is not a class, namespace, or enumeration
我试着改成下面的
template<class T, int N>
Stack<T, N>::iterator Stack<T, N>::insert(Stack::iterator p, const T &v)
{
...
}
现在错误变为
Missing 'typename' prior to dependent type name 'Stack<T, N>::iterator'
我不明白为什么我会收到此错误以及如何解决它,希望有人能提供帮助
【问题讨论】:
-
“我不明白为什么会出现这个错误以及如何解决它”虽然第一个是可以原谅的,但错误消息会告诉您确切的需要:
typename Stack<T, N>::iterator -
不相关的,也许看看
std::array而不是T[N]。