Я пишу программу 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);
};
node *next_cell = NULL;
node *previous_cell = NULL;
Это не будет летать - инициализаторы в классе для нестатических членов были введены только в С++ 11.
О adj_list
, реальное местоположение ошибки находится здесь:
void print(node **dummy = adj_list, int i = 0, int k = 0);
// ^^^^^^^^^^
Вы не можете иметь член класса в качестве значения по умолчанию, потому что он не знает, к какому экземпляру он должен принадлежать. Вы также не можете использовать this
там, поэтому вам придется выяснить другой способ передачи значения по умолчанию.
void print() { return print(adj_list); }
Кроме того, почему print
не помечена как const
?
adj_list
, int i = 0, int k = 0);