与公共方法授予私有类成员访问权限有关的编译器错误

时间:2019-07-06 13:07:29

标签: c++ compiler-errors private-members public-method template-classes

给出以下类模板定义

template<typename T>
class node{
    private:
        T& data;
        shared_ptr<node<T>>& next;
    public:
        T& get_data(void);
        shared_ptr<node<T>>& get_next (void);
    public:
        node(T&);
        ~node();
};

template<typename X>
class list{
    private:
        shared_ptr<X> head;
        list(shared_ptr<X>&);
    public:
        shared_ptr<X>& get_head(void);
        void set_head(shared_ptr<X>&);
    public:
        list();
        ~list();
    public:
        int size (void);
 };

以及以下相应的方法定义

template<typename T>
shared_ptr<node<T>>& node<T>::get_next(void){
    return(this->next);
}

template<typename X>
int list<X>::size (void){
    auto h = this->head;
    auto count = 0;

    while(h){
        ++count;
        h = h->get_next();
    }

    return count;
}

以及main()中的以下代码

list<node<string>>menu;
auto num_menu_items = menu.size();

随后出现以下编译器错误:

In instantiation of "int list<X>::size() [with X = node<std::basic_string<char> >]":
error: "std::shared_ptr<node<std::basic_string<char> > >& node<std::basic_string<char> >::next" is private within this context
         h = h->get_next();
             ~~~^~~~
note: declared private here
   shared_ptr<node<T>>& next;

完整的源代码可以在下面访问:

code.hpp

main.cpp

可以在下面访问完整的编译器日志:

compiler log

欣赏您的想法。

0 个答案:

没有答案