Hallo, ich habe in C++ einen Header für ein Projekt geschrieben aber ich kann innerhalb einer Klasse nicht auf eine Variable zugreifen.
Es kommt immer der Fehler:
..\ast.cpp:61:19: error: invalid use of non-static data member 'Tree::nodes'
p.set_type(Tree::nodes[id].get_type());
Hier ist der Code:
ast.h:
#ifndef AST_H_
#define AST_H_
class Tree {
public:
class Node {
public:
enum class Type {
METHOD,
IF,
WHILE,
STATEMENT,
EXPRESSION
};
void set_id(int id);
void set_id_parent(int id_parent);
void set_content(const char* content);
void set_type(Type type);
Type get_type();
const char* get_content();
int get_id();
int get_parent_id();
int* get_child_ids();
private:
Type m_type{};
const char* m_content{};
int m_id=0;
int m_id_parent=-1;
int* m_child_ids{};
};
void create_node(int parent, const char* content);
Node get_node(int id);
private:
Node* nodes{};
int node_amount=0;
};
#endif
ast.cpp:
#include "ast.h"
void Tree::Node::set_id(int id) {
m_id = id;
}
void Tree::Node::set_id_parent(int id_parent) {
m_id_parent = id_parent;
}
void Tree::Node::set_content(const char *content) {
m_content = content;
}
void Tree::Node::set_type(Type type) {
m_type = type;
}
const char* Tree::Node::get_content() {
return m_content;
}
Tree::Node::Type Tree::Node::get_type() {
return m_type;
}
int Tree::Node::get_id() {
return m_id;
}
int Tree::Node::get_parent_id() {
return m_id_parent;
}
int* Tree::Node::get_child_ids() {
return m_child_ids;
}
//
void Tree::create_node(int parent, const char *content) {
Node p;
p.set_id(node_amount);
p.set_id_parent(parent);
p.set_content(content);
nodes[node_amount] = p;
node_amount++;
}
Tree::Node get_node(int id) {
Tree::Node p;
p.set_type(Tree::nodes[id].get_type());
return p;
}
Ich hoffe jemand kann mir sagen warum dieser Fehler kommt
Außerdem wollte ich etwas C benutzen und lernen, also hätte ich noch eine zweite Frage: Kann mir jemand sagen wie ich das ganze nicht in C++ sondern in C mache?
LG