我正在编写一个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);
};
答案 0 :(得分:1)
node *next_cell = NULL;
node *previous_cell = NULL;
对于非静态成员而言,不会成功的初始化程序只在C ++ 11中引入。
关于adj_list
,错误的真实位置在这里:
void print(node **dummy = adj_list, int i = 0, int k = 0);
// ^^^^^^^^^^
您不能将类成员作为默认值,因为它不知道它应属于哪个实例。您也无法使用this
,因此您必须找出其他方式来传递默认值。