C++:类内部结构的作用域

C++ : Scope of struct inside a class

本文关键字:作用域 结构 内部 C++      更新时间:2023-10-16

我制作了一个class模板来实现名为"mystack"-:的"基于节点的"堆栈

template<typename T> class mystack;
template<typename T>ostream& operator <<(ostream& out,const mystack<T> &a);  
template<typename T> struct mystack_node  // The data structure for representing the "nodes" of the stack
{
    T data;
    mystack_node<T> *next;
};
template<typename T> class  mystack
{
    size_t stack_size;  // A variable keeping the record of number of nodes present in the stack
    mystack_node<T> *stack_top;  //  A pointer pointing to the top of the stack
    /*
    ...
    ...( The rest of the implementation )
    ...
    */
    friend ostream& operator << <T> (ostream&,const mystack&);
};
template<typename T>ostream& operator <<(ostream& out,const mystack<T> &a) // Output operator to show the contents of the stack using "cout"
{
    mystack_node<T> *temp=a.stack_top;
    while(temp!=NULL)
    {
        out<<temp->data<<" ";
        temp=temp->next;
    }
    return out;
}  

但我真正想要的是,除了类mystack之外,结构mystack_node不应该对代码的任何其他部分都是可访问的。所以我尝试了以下变通方法-:

template<typename T> class mystack;
template<typename T>ostream& operator <<(ostream& out,const mystack<T> &a);
template<typename T> class  mystack
{
    struct mystack_node  // The data structure for representing the "nodes" of the stack
    {
        T data;
        mystack_node *next;
    };
    size_t stack_size;       // A variable keeping the record of number of nodes present in the stack
    mystack_node *stack_top;       //  A pointer pointing to the top of the stack
    /*
    ...
    ...( The rest of the implementation )
    ...
    */
    friend ostream& operator << <T> (ostream&,const mystack&);
};
template<typename T>ostream& operator <<(ostream& out,const mystack<T> &a) // Output operator to show the contents of the stack using "cout"
{
    mystack<T>::mystack_node *temp=a.stack_top;
    while(temp!=NULL)
    {
        out<<temp->data<<" ";
        temp=temp->next;
    }
    return out;
}  

但是我从编译器中得到以下错误-:

In function ‘std::ostream& operator<<(std::ostream&, const mystack<T>&)’:  
error: ‘temp’ was not declared in this scope  

谁能告诉我如何解决这个问题吗??

如注释中所述,我需要在temp-:的声明前面插入关键字typename

typename mystack<T>::mystack_node *temp = a.stack_top;