Łączenie projektu powoduje wyświetlanie bezsensownych błędów , proszę o pomoc

0

Oto kod:

/////////// edge_element.h /////////////

#define edge_element_h
//**********************************************************************
// File: edge_element_lib.h
//**********************************************************************
//#include "logs.h"
#include "node.h"
//using namespace std;
//////////////////////////// CLASS DEFINITION //////////////////////////
//extern logs log_value;

class edge_element
{
	
	node *ptr_node1;
	node *ptr_node2;
	edge_element *next;

public:

	edge_element(node *node1,node *node2,edge_element *ptr)
	{
		ptr_node1 = node1;
		ptr_node2 = node2;
		next = ptr;
		
	}
	
	edge_element(node *node1,edge_element *ptr)
	{
		ptr_node1 = node1;
		ptr_node2 = node1->get_parent();
		next = ptr;
	}
	
	edge_element *get_ptr_next_edge()
	{

		return next;
	}
	
};
//////////////////////////// END OF CLASS DEFINITION //////////////////////////
#endif

/////////////edge_list.h/////////////////

#ifndef edge_list_h
#define edge_list_h

#include "node.h"
#include "edge_element.h"
#include <iostream>


class edge_list
{
	edge_element *last_added_edge;
	int edge_counter;
	
	void set_edge(edge_element *ptr)
	{
		last_added_edge = ptr;
	}

	
public:

	bool add_new_edge(node *node1);
	bool add_new_edge(node *node1,node *node2);

	edge_list()
	{
		last_added_edge = NULL;
		edge_counter = 0;
	}

	
	int get_el_counter()
	{
		return edge_counter;
	}


	edge_element *get_last_edge()
	{
		return last_added_edge;
	}

	void *delete_edge();

	bool clr_edges();

};



#endif



//////////////// node.h /////////////////


#ifndef node_h
#define node_h

#include "edge_list.h"
class node
{
private:
	edge_list edg;
	int id_node;
	node *parent;
public:
	bool operator == (node &right_arg)
	{	
		if(id_node == right_arg.id_node)
			return true;
		else 
			return false;
		
	}
	node *get_parent()
	{
		return parent;
	}
	int get_id_node()
	{
		return id_node;
	}
	node()
	{
		//edges.add_new_edge(*this);
		

	}
	
};


#endif


////////////////// edge_list.cpp ////////////

//*******************************************************
// File: list_lib.cpp
//*******************************************************
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "edge_list.h"
#include "edge_element.h"
//*******************************************************

bool edge_list::add_new_edge(node *node1)
{
	if(node1->get_id_node() > 0 && node1 != NULL && node1->get_parent() != NULL)
	{
		edge_element *new_edge = new edge_element(node1,last_added_edge);
			
			if(new_edge != NULL)
			{
				set_edge(new_edge);
				edge_counter++;
				//log_value.logs_printing("add_to_list:Item added",2);	
				return true;
			}
			else
			{
				//log_value.logs_printing("add_to_list:ERROR",1);	
				return false;
			}
	}
	else
	{
		//log_value.logs_printing("add_to_list:ERROR");
		return false;		
		
	}
}

bool edge_list::add_new_edge(node *node1,node *node2)
{
	if(node1 != NULL && node2 != NULL && node1 == node2)
	{
			edge_element *new_edge = new edge_element(node1,last_added_edge);
			if(new_edge != NULL)
			{
				set_edge(new_edge);
				edge_counter++;
				//log_value.logs_printing("add_to_list:Item added",2);	
				return true;
			}
			else
			{
				//log_value.logs_printing("add_to_list:ERROR",1);	
				return false;
			}

	}
	else
	{
			//log_value.logs_printing("add_to_list:ERROR");
			return false;
	}
	
	
}

//*******************************************************


///////////// main.cpp  //////////////

#include "edge_element.h"
#include "edge_list.h"
#include "node.h"


int main()
{}

//////////////////////////////////////////////BLEDY [visual studio]/////////////////////////////////

1>------ Build started: Project: graf, Configuration: Debug Win32 ------
1>Build started 2011-12-18 19:56:56.
1>InitializeBuildStatus:
1> Touching "Debug\graf.unsuccessfulbuild".
1>ClCompile:
1> main.cpp
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(11): error C2143: syntax error : missing ';' before ''
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(11): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(11): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(14): error C2061: syntax error : identifier 'edge_element'
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(22): error C2061: syntax error : identifier 'node'
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(23): error C2061: syntax error : identifier 'node'
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(23): error C2535: 'bool edge_list::add_new_edge(void)' : member function already defined or declared
1> c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(22) : see declaration of 'edge_list::add_new_edge'
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(38): error C2143: syntax error : missing ';' before '
'
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(38): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(39): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(41): warning C4183: 'get_last_edge': missing return type; assumed to be a member function returning 'int'
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(16): error C2065: 'last_added_edge' : undeclared identifier
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(16): error C2065: 'ptr' : undeclared identifier
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(27): error C2065: 'last_added_edge' : undeclared identifier
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\edge_list.h(40): error C2065: 'last_added_edge' : undeclared identifier
1> edge_list.cpp
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C2146: syntax error : missing ';' before identifier 'edg'
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1> Generating Code...
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.14
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Program tworzy listę połączeń wierzchołków grafu i zatrzymałem się na tym żeby tworzyło się połączenie przy stworzeniu wierzchołka z wierzchołkiem poprzednim.

Z tego co zauważyłem
Program się sypie po dołączeniu edge_list.h do node.h

Proszę o pomoc w rozwiązaniu mojego problemu. Jak ewentualnie powinienem inaczej to zrobić

0

Poggolaj za forward declaration. W tej chwili robisz includy tak: main.cpp -> edge_element.h -> node.h -> edge_list.h - zanim kompilator dojdzie do definicji klasy edge_element natrafia na nią w edge_list.h i wywala błąd. Może wycięcie "include node.h" z edge_element.h wystarczy by rozwiązać problem.

0

Po poprawieniu include - ów liczba błędów zmniejszyła się do :

1>------ Kompilacja rozpoczęta: Projektgraf, KonfiguracjaDebug Win32 ------
1>Kompilacja rozpoczęła się 2011-12-22 13:13:09.
1>InitializeBuildStatus:
1> Modyfikowanie „Debug\graf.unsuccessfulbuild”.
1>ClCompile:
1> main.cpp
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C2143: syntax error : missing ';' before ''
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1> edge_list.cpp
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C2143: syntax error : missing ';' before '
'
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\mateusz\desktop\graf-zadanie\graf\graf\node.h(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1> Generating Code...
1>
1>Kompilacja NIE POWIODŁA SIĘ.
1>
1>Czas, który upłynął: 00:00:00.85
========== Kompilacja: 0 zakończono powodzeniem, 1 zakończono niepowodzeniem, 0 zaktualizowano, 0 pominięto ==========

Program wskazuje na linijkę w node.h gdzie tworze wskaznik do obiektu typu edge_list.

Poprawione biblioteki:
main.cpp:
#include "edge_list.h"
#include "node.h"
edge_list.cpp:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "edge_list.h"
edge_element.h:
-brak bibliotek-
edge_list.h:
#include "node.h"
#include "edge_element.h"
#include <iostream>
node.h:
-brak bibliotek-

0

przeczytaj co ucho napisał.

jak używasz w jakiejś klasie tylko wskaźników do innej klasy to nie musisz dołączać całego pliku nagłówkowego, wystarczy forward declaration:
class node;

wystarczy, że w tym najgłówniejszym nagłówkowym dołączysz pozostałe pliki nagłówkowe

0

Po zmianie :
#ifndef node_h
#define node_h
//#include "edge_list.h"
class edge_list;

class node
{
private:
edge_list* edg;
int id_node;
node *parent;
public:
bool operator == (node &right_arg)
{
if(id_node == right_arg.id_node)
return true;
else
return false;

}
node *get_parent()
{
	return parent;
}
int get_id_node()
{
	return id_node;
}
node()
{
	//edges.add_new_edge(*this);
	

}

};

#endif

zaczęło "śmigać" ;) . Da się takie coś zrealizować inaczej niż class edge_list; przed klasą w której chcę stworzyć dany obiekt ?

0

ok, jeszcze raz dzięki ;) nauczyłem się czegoś nowego

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