недопустимое использование нестатического члена C ++ 98

0

Я пишу программу C++, которая, к сожалению, требует использования компилятора C++ 98. После написания программы и попыток компиляции я получаю эту ошибку:

error: invalid use of non-static data member 'graph::adj_list'

Это меня смущает, так как я использовал cppreference (http://en.cppreference.com/w/cpp/language/data_members), чтобы убедиться, что это скомпилируется. Кто-нибудь может мне помочь?

graph_frame.h

#include <cstddef>


class node{
friend class graph;
private:
    int node_name;
    int edge_weight;
    node *next_cell = NULL;
    node *previous_cell = NULL;

public:
    node(int name = 0, int new_edge = 0);
    ~node();
};


class graph{
private:
    void recursive_delete(int i, int k);
    node** adj_list;                     <----------------ERROR

public:
    //----argument not needed for constructor because a list is not created
    //----until create_graph() is called
    graph();
    ~graph();
    //----remember to free all buckets from list
    void create_graph(int& graph_nodes);
    int check_node(int& source_node, int& dest_node);
    void insert_node(int& source_node, int& dest_node, int& weight);
    void print(node **dummy = adj_list, int i = 0, int k = 0);
    void delete_node(int& source_node, int& dest_node);
};
  • 1
    Ошибка относится к void print (узел ** dummy = adj_list , int i = 0, int k = 0);
  • 0
    @ShafikYaghmour Есть ли другой способ сказать "использовать adj_list в качестве базы указателей для этого аргумента по умолчанию"?
Теги:
class
pointers
c++98

1 ответ

1
Лучший ответ
node *next_cell = NULL;
node *previous_cell = NULL;

Это не будет летать - инициализаторы в классе для нестатических членов были введены только в С++ 11.

О adj_list, реальное местоположение ошибки находится здесь:

void print(node **dummy = adj_list, int i = 0, int k = 0);
//                      ^^^^^^^^^^

Вы не можете иметь член класса в качестве значения по умолчанию, потому что он не знает, к какому экземпляру он должен принадлежать. Вы также не можете использовать this там, поэтому вам придется выяснить другой способ передачи значения по умолчанию.

  • 0
    Как насчет функции класса, которая возвращает адрес 'adj_list', и я могу использовать это для всех экземпляров print?
  • 1
    @Raspberry: Как насчет того, чтобы сделать аргумент необязательным и добавить перегрузку с нулевым аргументом void print() { return print(adj_list); } Кроме того, почему print не помечена как const ?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню