C lista z elementami typu wskaźnik na voida

0

Witam, stworzyłem strukturę, która jest wykorzystywana do tworzenia listy dwukierunkowej:

typedef struct stPart stPart;
struct stPart 
{
	void *pvContent;
	stPart *pNext, *pPrev;  
};

Jej elementem jest wskaźnik na voida. Lista działa dobrze, jednak gdy jako element podaję nie wskaźnik na zwykłą zmienną typu integer lub char, ale na strukturę, to nie mogę się później odwołać do konkretnego pola :/

Np daję wskaźnik do takiej struktury:

 typedef struct stVert stVert;
  struct stVert
  {
	char cVertexName;
	stPart *pBeginReach;  
  } ; 

I odwołując się: (pElemet to wskaźnik na element listy)

printf("%c\n",pElement->pvContent->cVertexName);

Wyskakuję błąd:
file.c request for member cVertexName' in something not a structure or union oraz: [Warning] dereferencing void *' pointer - ostrzeżenie to znika gdy w definicji pierwszej struktury daję void **pvContent; zamiast *pvContent;

1

Jeżeli masz wskaźnik na void to potem musisz rzutować na odpowiedni typ: http://ideone.com/Ffesl

U Ciebie trzeba rzutować pElement->pvContent na stVert * i dopiero potem odwoływać się do pola struktury.

2

pvContent jest typu void*, czyli jest to taki uniwersalny wskaźnik, który może wskazywać na cokolwiek, ale tak naprawdę to kompilator nie wie na co wskazuje.
Więc... musisz poinformować kompilator na co wskazuje pvContent przy resolvowaniu za pomocą rzutowania, np.

printf("%c\n", ((stVert*)pElement->pvContent)->cVertexName);

0

próbowałem i niedziała :/

1
Chev_Lucas napisał(a):

próbowałem i niedziała :/

Wspaniale. Ale może pokażesz więcej kodu, jakiś błąd kompilacji czy wykonania? Co Ci "niedziała". @Gynvael Coldwind i ja napisaliśmy Ci dokładnie to samo i to działa. W moim poście masz nawet przykład.

0

dobra Panowie dziękuję -działa...

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