C ++ необъявленные переменные

0

Файл, который я использую в моем проекте, имеет много деклараций в этом стиле:

static VALUE do_checksum(int, VALUE*, uLong (*)(uLong, const Bytef*, uInt));
...
static VALUE
 do_checksum(argc, argv, func)
     int argc;
     VALUE *argv;
     uLong (*func)(uLong, const Bytef*, uInt);
 {
    ...
 }

Хотя я никогда сам не писал код таким образом, я уверен, что это правильно. Однако мой компилятор возвращает

error: 'VALUE do_checksum' redeclared as different kind of symbol
error: 'argc' was not declared in this scope

Что здесь не так?

Windows 7

Код :: Блоки с MinGW

  • 3
    C ++ не поддерживает объявление параметров в старом стиле.
  • 0
    @JonathanPotter: Это объявления параметров C в старом стиле . Modern C по-прежнему разрешает их, но они официально устарели с 1989 года.
Показать ещё 4 комментария
Теги:

1 ответ

0
Лучший ответ

У вас есть некоторые объявления списка параметров параметра С-стиля.

Здесь примерное исправление:

static VALUE do_checksum(
    int argc,
    VALUE *argv,
    uLong (*func)(uLong, const Bytef*, uInt)
    )
{
    ...
}

Еще лучше исправить было бы создание псевдонима типа для func например:

using func_ptr_type = uLong (*)(uLong, const Bytef*, uInt);
  • 0
    Поэтому, следуя вашему примеру, я бы просто покончил со «статическим VALUE do_checksum (int, VALUE *, uLong ( ) (uLong, const Bytef , uInt));» полностью?
  • 0
    @ chrisvj, нет, выглядит более внимательно. Вам нужно переместить объявления параметров внутри () и заменить запятые точкой с запятой
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню