компиляция функции проходит с ошибками, ligurio, 13-Апр-06, 21:11 [смотреть все]есть такая функция:char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing) { char* par; const char* find; WORD maxl; char end; bool argparsing; bool bZend = false; char *res, *rres; char *s, *x; char a, b; if(par == NULL) return NULL; if(find == NULL) return NULL; if((s = strstr(par, find)) == NULL) return NULL; if(bZend = ((x = strchr(s, end)) == NULL)) x = strchr(s, 0); else *x = 0; // temporary change '&' to '\0' rres = res = (char *)malloc(maxl + 1); s = s + strlen(find); if(argparsing) { while(*s != '\0' && res - rres < maxl) { if(*s == '%' && x > s + 2) { if((a = parsesym(*(s + 1))) == 20) { s++; continue; // ignore invalid % } if((b = parsesym(*(s + 2))) == 20) { s++; continue; // ignore invalid % } *res = (char)(a*16 + b); s+=2; } else if(*s == '+') *res = ' '; else *res = *s; res++; s++; } *res = 0; rres = (char*)realloc(rres, strlen(rres) + 1); } else { strncpy(rres, s, maxl); rres[maxl] = 0; // fix for any string } if(!bZend) x = end; return rres; } она разбирает строку ввода в CGI приложении. Но она не хочет компилироваться в Linux. Причем в приложении, откуда выдрана функция ошибок никаких не выдается, а когда вставляю ее в свою программу сыпятся непонятные ошибки: estet@qa-debian:~/traintimetable/t41$ make g++ -O2 -fno-exceptions -DUSE_LIB=0 -Wcomment -c -o t3.o t3.c In file included from t3.c:8: cgi.h:108:7: warning: no newline at end of file In file included from t3.c:10: design.h:62:141: warning: no newline at end of file t3.c:138: error: type specifier omitted for parameter `WORD' t3.c:138: error: parse error before `,' token t3.c: In function `char* strget(...)': t3.c:142: error: `WORD' undeclared (first use this function) t3.c:142: error: (Each undeclared identifier is reported only once for each function it appears in.) t3.c:142: error: parse error before `;' token t3.c:156: error: `maxl' undeclared (first use this function) t3.c:183: error: invalid conversion from `char' to `char*' t3.c: In function `CTime* GetCurrentTime()': t3.c:280: warning: address of local variable `current_time' returned t3.c: In function `int LastModificationOf(const char*)': t3.c:298: error: 'struct stat' has no member named 'st_mtimespec' make: *** [t3.o] Ошибка 1 Помогите понять в чем дело!
|
- компиляция функции проходит с ошибками, Hordi, 22:34 , 13-Апр-06 (1)
>char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing) >{ > char* par; Корявая функция... Смотри: параметр и сразу переменная с таким же именем объявлена... WORD на int замени...
- компиляция функции проходит с ошибками, ligurio, 13:31 , 14-Апр-06 (2)
>>char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing) >>{ >> char* par; >Корявая функция... Смотри: параметр и сразу переменная с таким же именем объявлена... >WORD на int замени... это я потом уже дописал объявление переменных в функции, потому что компилятор ругался, что переменные-параметры необъявлены. Если написать так: char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing) { bool bZend = false; char *res, *rres; char *s, *x; char a, b; if(par == NULL) return NULL; if(find == NULL) return NULL; if((s = strstr(par, find)) == NULL) return NULL; if(bZend = ((x = strchr(s, end)) == NULL)) x = strchr(s, 0); else *x = 0; // temporary change '&' to '\0' rres = res = (char *)malloc(maxl + 1); s = s + strlen(find); if(argparsing) { while(*s != '\0' && res - rres < maxl) { if(*s == '%' && x > s + 2) { if((a = parsesym(*(s + 1))) == 20) { s++; continue; // ignore invalid % } if((b = parsesym(*(s + 2))) == 20) { s++; continue; // ignore invalid % } *res = (char)(a*16 + b); s+=2; } else if(*s == '+') *res = ' '; else *res = *s; res++; s++; } *res = 0; rres = (char*)realloc(rres, strlen(rres) + 1); } else { strncpy(rres, s, maxl); rres[maxl] = 0; // fix for any string } if(!bZend) x = end; return rres; } То все равно не компилируется.
- компиляция функции проходит с ошибками, Сергей, 14:11 , 14-Апр-06 (3)
>estet@qa-debian:~/traintimetable/t41$ make >g++ -O2 -fno-exceptions -DUSE_LIB=0 -Wcomment -c -o t3.o t3.c >In file included from t3.c:8: >cgi.h:108:7: warning: no newline at end of file >In file included from t3.c:10: >design.h:62:141: warning: no newline at end of file >t3.c:138: error: type specifier omitted for parameter `WORD' >t3.c:138: error: parse error before `,' token >t3.c: In function `char* strget(...)': >t3.c:142: error: `WORD' undeclared (first use this function) >t3.c:142: error: (Each undeclared identifier is reported only once for each > function it appears in.) Проблема в том, что у тебя не объявлен тип WORD. Определи его #define WORD unsigned int или unsigned short int, как тебе нужно. >t3.c:142: error: parse error before `;' token >t3.c:156: error: `maxl' undeclared (first use this function) >t3.c:183: error: invalid conversion from `char' to `char*' >t3.c: In function `CTime* GetCurrentTime()': >t3.c:280: warning: address of local variable `current_time' returned >t3.c: In function `int LastModificationOf(const char*)': >t3.c:298: error: 'struct stat' has no member named 'st_mtimespec' >make: *** [t3.o] Ошибка 1 > >Помогите понять в чем дело! Что-то выдергивать и других приложений нужно внимательно.
- компиляция функции проходит с ошибками, ligurio, 15:42 , 14-Апр-06 (5)
>Проблема в том, что у тебя не объявлен тип WORD. Определи его >#define WORD unsigned int или unsigned short int, как тебе нужно. >>Помогите понять в чем дело! > >Что-то выдергивать и других приложений нужно внимательно. Серег, спасибо тебе большое! Помогло!
- компиляция функции проходит с ошибками, Сергей, 14:25 , 14-Апр-06 (4)
Вот я такое скомпилил командой g++ -c <filename>:Вот на эту строку ругался, что не может преобразовать char к char*: if(!bZend) x = end; Смотри типы лучше. #include <stdlib.h> #include <string.h> #define WORD unsigned int char parsesym(char ch) { return ch; } char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing) { bool bZend = false; char *res, *rres; char *s, *x; char a, b; if(par == NULL) return NULL; if(find == NULL) return NULL; if((s = strstr(par, find)) == NULL) return NULL; if(bZend = ((x = strchr(s, end)) == NULL)) x = strchr(s, 0); else *x = 0; // temporary change '&' to '\0' rres = res = (char *)malloc(maxl + 1); s = s + strlen(find); if(argparsing) { while(*s != '\0' && res - rres < maxl) { if(*s == '%' && x > s + 2) { if((a = parsesym(*(s + 1))) == 20) { s++; continue; // ignore invalid % } if((b = parsesym(*(s + 2))) == 20) { s++; continue; // ignore invalid % } *res = (char)(a*16 + b); s+=2; } else if(*s == '+') *res = ' '; else *res = *s; res++; s++; } *res = 0; rres = (char*)realloc(rres, strlen(rres) + 1); } else { strncpy(rres, s, maxl); rres[maxl] = 0; // fix for any string } if(!bZend) x = &end; return rres; } int main() { return 0; }
|