krzyżowe definiowanie klas

0

witam, oto kod:

////////////////  edge.h ///////////


#ifndef edge_h
#define edge_h

#include "node.h"
#include "edge_element.h"
#include <iostream>
#include "graph.h"
#include "logs.h"
extern logs log_value;
class edge_list
{
	edge_element *edge_head;
	int edge_counter;
	void set_head(edge_element *ptr)
	{
		edge_head = ptr;
	}
	
public:
	edge_list(node_element *node_ptr)
	{
		edge_head=NULL;
	}
};
////////////////////// edge_element.h //////////////////////////

#ifndef edge_element_h
#define edge_element_h

#include <iostream>

#include "logs.h"
extern logs log_value;
class node_element;

class edge_element
{
	int edge_id;
	node_element *node_ptr;
	edge_element *next;

public:

	edge_element(int id , node_element *ptr, edge_element *next_element): edge_id(id) , node_ptr(ptr) , next(next_element) {}
};

#endif

/////////////////////////graph.h///////////////////////
#ifndef graph_h
#define graph_h

#include <iostream>
#include "node.h"
//#include "node_element"
#include "edge.h"
using namespace std;

#include "logs.h"
extern logs log_value;
extern int LOG_MODE;
class graph
{
	node *nod;
	
};


#endif
//////////////logs.h i logs.cpp - puste ///////////////////

////////////////node.h//////////////////
#ifndef node_h
#define node_h
#include <iostream>
#include "node_element.h"
#include "logs.h"
extern logs log_value;

class node
{
	node_element *node_head;
	int node_counter;
	node_element *ROOT;
};

#endif


//////////////////node_element.h //////////////
#ifndef node_element_h
#define node_element_h

#include <iostream>
#include "edge.h"
#include "logs.h"
extern logs log_value;
using namespace std;
class node_element
{
	int row;
	int id;
	edge_list *edge;
	node_element *next;

public:
		
		node_element(int _id , node_element *_next , node_element *parent) : id(_id)  , edge(NULL) , next(_next) 
		{
		}
		int get_node_id(void){return id;}
		int get_row(void){return row;}
		edge_list *get_edge_list(void){return edge;}
		node_element *get_next_node(void){return next;}


};

#endif

//////////////////main.cpp//////////////////
#include "graph.h"

graph x;

int main()
{
	system("PAUSE");
}

/////////////// graph.cpp ///////////////////

#include "graph.h"
/////////////// edge.cpp i node.cpp - puste /////////////////

Chcę zdefiniowac metody klasy edge_list i node w plikach cpp , lecz niestety przy zwyklym #include "edge.h" w edge.cpp wyskakuje masa błędów, jak powinienem poprawinie to zrobic ? Oto lista błędów :

1>------ Kompilacja rozpoczęta: ProjektGRAPH, KonfiguracjaDebug Win32 ------
1>Kompilacja rozpoczęła się 2011-12-24 2134.
1>InitializeBuildStatus:
1> Modyfikowanie „Debug\GRAPH.unsuccessfulbuild”.
1>ClCompile:
1> edge.cpp
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(13): error C2143: syntax error : missing ';' before ''
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(23): error C2143: syntax error : missing ';' before '
'
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(23): warning C4183: 'get_edge_list': missing return type; assumed to be a member function returning 'int'
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(19): error C2614: 'node_element' : illegal member initialization: 'edge' is not a base or member
1>c:\users\mateusz\desktop\graph\graph\graph\node_element.h(23): error C2065: 'edge' : undeclared identifier
1>
1>Kompilacja NIE POWIODŁA SIĘ.
1>
1>Czas, który upłynął: 0000.54
========== Kompilacja: 0 zakończono powodzeniem, 1 zakończono niepowodzeniem, 0 zaktualizowano, 0 pominięto ==========

Proszę o pomoc

0

Jeśli klasa A potrzebuje deklaracji klasy B to w pliku z klasą A piszemy:

class B;
class A{
//itd
};
0

w pliku h wiem co piszemy, ale nie wiem jak powinien wyglądać plik cpp (przy deklaracji krzyżowej klas ) ... może ktoś mi napisać jak w tym wypadku powinien wyglądać np plik edge.cpp żeby się kompilowało ?

0

Chyba jednak nie wiesz, bo w żadnych z powyższych plików, oprócz jednego, nie widzę takich deklaracji (a na pewno brakuje takiej w node_element.h o czym kompilator cię informuje). W plikach cpp potrzebujesz tylko dać include dla wszystkich potrzebnych ci klas. Krzyżowość definicji jest załatwiana całkowicie na poziomie plików nagłówkowych. Jak ci nie działa to znaczy że tam masz błąd.

0

ok, dzięki - problem rozwiązany : jednak miałeś rację, brakowało jednej czy dwóch deklaracji klas + bałagan w bibliotekach , dzięki ;))

1 użytkowników online, w tym zalogowanych: 0, gości: 1