10. januar 2004 - 19:35
Der er
29 kommentarer
Struct - Pointere - Imagecraft AVR compiler
HEY jeg sidder igen og leger med min atmega og imagecraft... jeg har fået muret et netværksinterface sammen, og kan nu pinge etc... men så vil jeg gerne have en hjemmeside på... der er lavet dertil.. men ikke lige til imagecraft.. min compiler kommer med fejl på dette : const struct fsdata_file file_cgi_stats[] = {{NULL, data_cgi_stats, data_cgi_stats + 11, sizeof(data_cgi_stats) - 11}}; Fejlen er : C:\icc\bin\imakew -f nic.mak iccavr -c -IC:\icc\include\ -e -D__IMAGECRAFT__ -DATMEGA -l -g -Mavr_enhance d D:\UIP6.0\fs.c iccavr -c -IC:\icc\include\ -e -D__IMAGECRAFT__ -DATMEGA -l -g -Mavr_enhance d D:\UIP6.0\fsdata.c !E D:\UIP6.0\fsdata.c(667): cannot initialize undefined `incomplete struct fsdata_file defined at D:\UIP6.0\fsdata.c(667)' !E D:\UIP6.0\fsdata.c(667): skipping `{' `NULL' `,' `data_cgi_stats' `,' `data_cgi_stats' `+' `11' ... up to `;' !E D:\UIP6.0\fsdata.c(667): syntax error; found `;' expecting `}' An integer divide by zero was encountered at address 0x00425364.iccavr: can't execute `C:\icc\bin\iccomavr.exe' C:\icc\bin\imakew.exe: Error code 100 Done: there are error(s). Exit code: 100 declaration (er i en H fil) : struct fsdata_file { const struct fsdata_file *next; const char *name; const char *data; const int len; #ifdef FS_STATISTICS #if FS_STATISTICS == 1 u16_t count; #endif /* FS_STATISTICS */ #endif /* FS_STATISTICS */ }; Håber nogle kan hjælpe mig med hvorfor min compiler ikke æder det Mange tak KAsper
Annonceindlæg fra DE-CIX
10. januar 2004 - 19:37
#1
Umiddelbart lyder det som fsdata.c ikke inkluderer den .h fil !
10. januar 2004 - 19:42
#2
Oki Tak Det hjalp en del på det, men får den disse fejl nu til samme linie: C:\icc\bin\imakew -f nic.mak iccavr -c -IC:\icc\include\ -e -D__IMAGECRAFT__ -DATMEGA -l -g -Mavr_enhanced D:\UIP6.0\fs.c iccavr -c -IC:\icc\include\ -e -D__IMAGECRAFT__ -DATMEGA -l -g -Mavr_enhanced D:\UIP6.0\fsdata.c !E D:\UIP6.0\fsdata.c(670): undeclared identifier `NULL' !E D:\UIP6.0\fsdata.c(670): invalid initialization type; found `int' expected `pointer to const struct fsdata_file' !E D:\UIP6.0\fsdata.c(670): initializer must be constant C:\icc\bin\imakew.exe: Error code 1 Done: there are error(s). Exit code: 1 Tror du at du kan hjælpe med den også ??
10. januar 2004 - 19:47
#3
undeclared identifier `NULL' => mangler #include <stdlib.h>
10. januar 2004 - 19:47
#4
Den anden må have noget med data_cgi_stats at gøre
10. januar 2004 - 21:10
#5
struct fsdata_file { const struct fsdata_file *next; Nogle der kan fortælle hvad det gør ??? bruger den samme struct name i en anden struct eller ??? KAsper
10. januar 2004 - 21:13
#6
struct fsdata_file indeholder en pointer til sin egen type. Det er helt standard i linkede lister og den slags.
10. januar 2004 - 21:19
#7
Kan der være en begrænsingen så compileren ikke kan det ??
10. januar 2004 - 21:22
#8
Hvad for en fejl snakker du om ? "invalid initialization type" skyldes formentlig at data_cgi_stats ikker er eklæret som den skal.
10. januar 2004 - 21:34
#9
den ser sådan her ud, og ligger i samme c fil : static const char data_cgi_stats[] = { /* /cgi/stats */ 0x2f, 0x63, 0x67, 0x69, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0, 0x69, 0x20, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x63, 0x20, 0x61, 0xa, 0x69, 0x20, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xa, 0x2e, 0xa, }; hvis jeg includer Header filen(som er includeret før) fil i den omtalte c fil, kommer den med den mangler den NULL, så inkludere jeg STDIO, så kommer den og siger alle de andre variabler er defineret 2 gange, sletter jeg så den H fil, er jeg tilbage hvor jeg startede )): nogle ideer ? Tænkte på om det kunne passe den compiler er for "overfladisk" til den kan håndtere en pointer til sin egen type ?
10. januar 2004 - 21:37
#10
Så ville jeg prøve med: const struct fsdata_file file_cgi_stats[] = {{NULL, (const struct fsdata_file *)data_cgi_stats, data_cgi_stats + 11, sizeof(data_cgi_stats) - 11}}; altså en type cast.
10. januar 2004 - 21:37
#11
En C compiler *skal* acceptere en pointer til sig selv.
10. januar 2004 - 22:11
#12
Umilbat som jeg har fundet ud af nu, syntes jeg det peger på at den ikke fatter det her : const struct fsdata_file *next; For hvis jeg remmer den ud og sletter det parameter i const struct fsdata_file file_cgi_stats[] = {{NULL, data_cgi_stats, data_cgi_stats + 11, sizeof(data_cgi_stats) - 11}}; så kommer der ikke fejl i sætningen... ??
10. januar 2004 - 22:13
#13
Har du prøvet mit 21:37:32 forslag ?
10. januar 2004 - 22:15
#14
ja.. stadig fejl det giver : !E D:\UIP6.0/fsdata.c(673): invalid initialization type; found `pointer to const struct fsdata_file' expected `pointer to const char' C:\icc\bin\imakew.exe: Error code 1 C:\icc\bin\imakew.exe: 'fs.o' removed.
10. januar 2004 - 22:19
#15
Jeg har set forkert på struct definitionen. next skal være NULL.
10. januar 2004 - 22:19
#16
Men det skal kunen lade sig gøre. Har du include stdlib.h ?
10. januar 2004 - 22:25
#17
Nej det havde jeg ikke fejl med den : !E D:\UIP6.0/fsdata.c(673): invalid initialization type; found `pointer to const struct fsdata_file' expected `pointer to const char' Men den NULL er defined således et andet sted : #define NULL (void *)0
10. januar 2004 - 22:25
#18
Tror det er den første af variablerne / pointerne der laver problemet, som skrevet
10. januar 2004 - 22:28
#19
Hvad med: #includ <stdlib.h> og const struct fsdata_file file_cgi_stats[] = {{(const struct fsdata_file *)NULL, data_cgi_stats, data_cgi_stats + 11, sizeof(data_cgi_stats) - 11}};
10. januar 2004 - 22:32
#20
nope : !E D:\UIP6.0/fsdata.c(673): invalid initialization type; found `pointer to const struct fsdata_file' expected `pointer to const char' heller ikke med {{(const char fsdata_file *) er prøvete både med og uden )):
10. januar 2004 - 22:34
#21
Har du fået sat next pointeren ind igen i strukturen ?
10. januar 2004 - 22:38
#22
PT ser det sådan her ud : struct fsdata_file { const struct fsdata_file *NEXT; const char *name; const char *data; const int len; #ifdef FS_STATISTICS #if FS_STATISTICS == 1 u16_t count; #endif /* FS_STATISTICS */ #endif /* FS_STATISTICS */ }; const struct fsdata_file file_cgi_stats[] = {{(const struct fsdata_file *)NULL, data_cgi_stats, (const struct fsdata_file *)data_cgi_stats +11, sizeof(data_cgi_stats) - 11}}; Sætter meget pris på din hjælp (: (også selvom jeg er meget nybegynder)
10. januar 2004 - 22:41
#23
Der skal fjernes noget tror jeg: const struct fsdata_file file_cgi_stats[] = {{(const struct fsdata_file *)NULL, data_cgi_stats, data_cgi_stats +11, sizeof(data_cgi_stats) - 11}};
10. januar 2004 - 22:49
#24
MEn tænkte på NULL er jo defineret som en pointer #define NULL (void *)0 er det lige meget ?? dette er fejlen nu : !E D:\UIP6.0\fsdata.c(674): cannot initialize undefined `incomplete struct fsdata_file defined at D:\UIP6.0\fsdata.c(674)' !E D:\UIP6.0\fsdata.c(674): skipping `{' `(' !E D:\UIP6.0\fsdata.c(674): syntax error; found `const' expecting `}'
10. januar 2004 - 22:56
#25
Øh - nu er vi tilbage til den oprindelige fejl.
10. januar 2004 - 22:57
#26
men tror bestemt det er i den første variable fejlen skal findes
10. januar 2004 - 23:04
#27
hmm måske ikke i det første anyway.. dunno
11. januar 2004 - 23:32
#28
Ingen der har flere ideer ??
12. januar 2004 - 13:01
#29
Er FS_STATISTIC defineret til 1? er u16_t defineret? Dette fungere for mig: #include <stdlib.h> #define u16_t short const char data_cgi_stats[] = { 0x32, }; struct fsdata_file { const struct fsdata_file *NEXT; const char *name; const char *data; const int len; //#ifdef FS_STATISTICS //#if FS_STATISTICS == 1 u16_t count; //#endif /* FS_STATISTICS */ //#endif /* FS_STATISTICS */ }; const struct fsdata_file file_cgi_stats[] = { {(const struct fsdata_file *)NULL, data_cgi_stats, data_cgi_stats +11, sizeof(data_cgi_stats) - 11 } }; int main() { return 0; }
Kurser inden for grundlæggende programmering