Problem z wskaźnikami przy wywolaniu funkcji

0

Witam, pracuję obecnie nad małym programem w C++ natrafiłem natomiast na mały problem którego nie umiem rozwiązać.
Mianowicie chcę zbudować tablicę z elementów struct które reprezentują jakąś tam wartość. Chce to użyć jako uproszczoną wersję reprezentacji grafu.

Poniżej podaję to co dotychczas wyczarowałem:

 
struct NodeItem 
{
	int weight;
	struct NodeItem *next;
};

void changeItem(int value, NodeItem **curr)
{
	if ( (*curr) != NULL)
	{
		(*curr)->weight = value;
	}
}


//dodaje Node do kolekcji
void addNode(int value, NodeItem **curr)
{
	struct NodeItem *lastNode;
	struct NodeItem *newNode;
	newNode = (struct NodeItem*)malloc(sizeof(struct NodeItem));
	newNode->weight = value;
	if ((*curr) == NULL)
	{
		(*curr) = newNode;
		(*curr)->next = (*curr);
	}
	else
	{
		lastNode = (*curr)->next;
		(*curr)->next = newNode;
		newNode->next = lastNode;
	}

}

void displaySasiadow(NodeItem **curr)
{
	while((*curr)->next != NULL)
	{
		cout<<(*curr)->weight<<" ";
		*curr = (*curr)->next;
	}
}

NodeItem* graph;

int main () {

	graph = new NodeItem[6];
	for (int i = 0; i<6; i++)
	{
		changeItem(i, &graph[i]);
	}
}

Niestety wyżej wymieniony kod nie działa.
Problem jest tutaj z
changeItem. Mianowicie kompilator (visual studio)
mówi:
argument of type "NodeItem *" is incompatible with parameter of type "NodeItem **"

Możecie mi pomóc przeskoczyć ten problem? z góry dzięki za pomoc.

0
changeItem(i, graph+i);

void changeItem(int value, NodeItem *curr)
  {
   if(curr) curr->weight=value;
  }

Tylko po kiego ci next skoro robisz tablicę?

Podejrzewam że potrzebujesz:

struct Wezel;
struct Krawedz { int weight; Wezel *to; Krawedz *next; ... };
struct Wezel { string nazwa; Wezel *next; Krawedz *first,*last; ... };
struct Graph
  {
   Wezel *first,*last;
  };
0

Dziękuję bardzo za podpowiedź. Teraz ruszę już dalej.
No właśnie chcę uniknąć tworzenia krawędzi etc.

Moja koncepcja jest następująca:
tablica iluś węzłów (tyle ile ma graf)
wezeł1
węzeł2
węzeł3
Zaś next wskazuje na wszystkie węzły z którymi ma połączenie (krawędź).

Czyli to nie jest macierz sąsiedztwa ale zwykła tablica wszystkich elementów w grafie oraz ich sąsiadów.
Mam nadzieję że jasno wytłumaczyłem

Dzięki tej koncepcji unikam problemu z grafami rzadkimi. Dla grafów gęstych mam macierz sąsiedztwa. <jako dane wejściowe mam informację ile węzłów i ile krawędzi co umożliwia mi ustalenie który model reprezentacji zastosować>.

A z operacji podstawowych to tylko dodawanie sąsiadów potrzebuję, usuwanie sąsiadów etc ale to już powinien móc robić jak dla zwykłej kolejki

Raz jeszcze dziękuję za podpowiedź.

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