Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » casting

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.12.2005, 19:18 Uhr
Pler
Einer von Vielen
(Operator)


Warum geht das nicht?


C++:
void* worker( void* args )
{
        args = (struct thread_args*)args;
  .
  .
  .
        pthread_mutex_lock( &(args->mutex) );
  .
  .
  .
}




gcc:

warning: dereferencing ‘void *’ pointer



---------------

also mach ich's so umständlich:


C++:
void* worker( void* arg )
{
        struct
        thread_args* args;

        args = (struct thread_args*)arg;
  .
  .
  .
        pthread_mutex_lock( &(args->mutex) );




dann kommt aber immernoch:

gcc:

error: dereferencing pointer to incomplete type



hier ist die strucktur:

C++:
struct thread_agrs
{
    int fifo_des;
    int output_des;
    pthread_mutex_t mutex;
};


Dieser Post wurde am 14.12.2005 um 19:19 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.12.2005, 11:20 Uhr
Pler
Einer von Vielen
(Operator)


Ok der zweite Teil hat sich gelöst, nachdem ich alles richtig geschieben habe... is auch zu blöd manchmal ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.12.2005, 11:30 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


was bitte soll das denn bewirken?

C++:
args = (struct thread_args*)args;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.12.2005, 12:13 Uhr
Tommix



Jepp, ein void* bleibt ein void* und da weiß der Compiler halt nicht, wieviele Bytes er beim Dereferenzieren nun lesen darf / muß. Der obige Cast wird implizit hierzu:

C++:
args = (void*)(struct thread_args*)args;


Der zweite Weg ist bis auf den Typo schon korrekt.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.12.2005, 12:43 Uhr
Pler
Einer von Vielen
(Operator)


Naja, ich dacht ja nur, dass man sich vielleicht eine Variable sparen kann!

Ich bin doch so unkreativ und tuh mich somit immer schwer schöne Namen zu finden!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.12.2005, 15:04 Uhr
0xdeadbeef
Gott
(Operator)


Das ginge wohl:

C++:
pthread_mutex_lock(&(((thread_args *)arg)->mutex));


...sieht aber widerlich aus. Ich würds in ne eigene Variable packen und das Optimieren dem Compiler überlassen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: