The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"компиляция функции проходит с ошибками"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"компиляция функции проходит с ошибками"  
Сообщение от ligurio (??) on 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

Помогите понять в чем дело!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "компиляция функции проходит с ошибками"  
Сообщение от Hordi email on 13-Апр-06, 22:34 
>char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing)
>{
> char* par;
Корявая функция... Смотри: параметр и сразу переменная с таким же именем объявлена... WORD на int замени...
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "компиляция функции проходит с ошибками"  
Сообщение от ligurio (??) on 14-Апр-06, 13:31 
>>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;
}

То все равно не компилируется.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "компиляция функции проходит с ошибками"  
Сообщение от Сергей (??) on 14-Апр-06, 14:11 
>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
>
>Помогите понять в чем дело!

Что-то выдергивать и других приложений нужно внимательно.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "компиляция функции проходит с ошибками"  
Сообщение от ligurio (??) on 14-Апр-06, 15:42 
>Проблема в том, что у тебя не объявлен тип WORD. Определи его
>#define WORD unsigned int или unsigned short int, как тебе нужно.
>>Помогите понять в чем дело!
>
>Что-то выдергивать и других приложений нужно внимательно.

Серег, спасибо тебе большое! Помогло!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "компиляция функции проходит с ошибками"  
Сообщение от Сергей (??) on 14-Апр-06, 14:25 
Вот я такое скомпилил командой 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;
}

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру