2017-08-07 2 views
0

ich viele Beiträge zu diesem Thema gelesen habe, und ich kann Ihnen sagen, (jeden Beitrag habe ich gelesen habe diesen Satz von Annahmen macht, lässt es so kommen aus dem Weg früh):kann nicht timespec in einer anderen Struktur schließen

  • ich habe enthalten time.h entsprechend
  • I angegeben haben sowohl die POSIX-Konstanten und -std = gnu99

Code:

#if __STDC_VERSION__ >= 199901L 
#define _XOPEN_SOURCE 600 
#else 
#define _XOPEN_SOURCE 500 
#endif /* __STDC_VERSION__ */ 

#include <linux/soundcard.h> 
#include <unistd.h> 
#include <fcntl.h> 
#include <stdio.h> 

#include <string.h> 
#include <stdlib.h> 
#include <time.h> 
#define uint unsigned int 

struct KEYDATA 
{ 
    struct timestruct duration; 
} ; 

// output/display function 
int main(void) 
{ 
    struct KEYDATA keyData[20]; 

    keyData.duration.tv_nsec = 999; 

    return 0; 
} 

Beim Kompilieren:

[email protected]:~/src/midi-timing $ gcc tmp.c -O2 -Wall -pedantic -o tmp -std=gnu99 -lrt 
tmp.c:19:22: error: field ‘duration’ has incomplete type 
    struct timestruct duration; 
        ^
tmp.c: In function ‘main’: 
tmp.c:27:11: error: request for member ‘duration’ in something not a structure or union 
    keyData.duration.tv_nsec = 999; 
     ^
tmp.c:25:19: warning: variable ‘keyData’ set but not used [-Wunused-but-set-variable] 
    struct KEYDATA keyData[20]; 
       ^
[email protected]:~/src/midi-timing $ 

Ich gebe zu, ich ein wenig rostig auf meiner C-Programmierung bin, aber es muss etwas hier sein, die ich bin nicht zu sehen. Wenn Sie den Fehler sehen, lassen Sie es mich wissen. Vielen Dank.

+0

ersetzen Suchen Sie für 'struct timespec' (definiert in [ '' ] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ time.h.html); hat eine Nanosekundenauflösung und Member 'tv_nsec') oder' struct timeval' (definiert in [''] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_time.h. html); hat Mikrosekundenauflösung und Mitglied 'tv_usec' und ist mehr oder weniger veraltet)? Ich nehme an, dass "struct timestruct" ein Tippfehler für "struct timespec" ist. –

+0

Sie können feststellen, dass der Fragetitel "struct timespec" korrekt identifiziert; es geht einfach darum, diesen Gedanken nicht zum Code zu tragen. –

Antwort

1

Sie haben den Typ duration als struct timestruct anstelle von struct timespec identifiziert. Reparieren Sie einfach diesen Rechtschreibfehler und ich glaube, es sollte Ihnen gut gehen.

+1

Vielen Dank für die Klarstellung. Ich muss es gestern etwas zu lange gesucht haben. Das ist nicht nur der primäre Fehler, sondern ich musste das Array auch indizieren, indem ich die Variable tv_nsec einstelle. – signal7

1

Sie müssen timestruct mit timespec

#if __STDC_VERSION__ >= 199901L 
#define _XOPEN_SOURCE 600 
#else 
#define _XOPEN_SOURCE 500 
#endif /* __STDC_VERSION__ */ 

#include <linux/soundcard.h> 
#include <unistd.h> 
#include <fcntl.h> 
#include <stdio.h> 

#include <string.h> 
#include <stdlib.h> 
#include <time.h> 
#define uint unsigned int 

struct KEYDATA 
{ 
     //struct timestruct duration; 
     struct timespec duration; 
} ; 

// output/display function 
int main(void) 
{ 
    struct KEYDATA keyData[20]; 

    //keyData.duration.tv_nsec = 999; 
    keyData->duration.tv_nsec = 999; 

    return 0; 
} 
Verwandte Themen