无效使用非静态成员C ++ 98

时间:2014-04-06 19:20:04

标签: c++ class pointers c++98

我正在编写一个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 个答案:

答案 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,因此您必须找出其他方式来传递默认值。