Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача в функцию неопределенное количество аргументов.  (Прочитано 6191 раз)
0 Пользователей и 1 Гость смотрят эту тему.
KBAC
Постоялец

ru
Offline Offline
Пол: Мужской

« : 15-04-2012 17:32 » 

Такой код:
Код: (C++)
void main() {
line *$1 = NULL,
       *$2 = NULL,
      *$3 = NULL;

line *p = $1;
_debug(p);

r->setRside(p, $2, $3);

}

// функция отладки чтобы глядеть значение переданного аргумента
void _debug(line* papa) {
int i = 0;
return;
}


//(А) Кусок кода в котором использую передачу аргументов неопределенного числа
void Rule::setRside (...) {
        rside = new RightSide;
        va_list symbols;
        va_start (symbols, lengthRule);
        rside->setAlltable(symbols, lengthRule);
        va_end(symbols);
}

//(Б)продолжение
void RightSide::setAlltable (va_list args, int numArgs) {
        alltable = new line* [numArgs];
        for (int i = 0; i < numArgs; i++)
                alltable[i] = va_arg(args, line*);
}
В дебаге (_debug(p)) проверяю значение - все верно. Как только передаю в кусок кода "А" аргументы, то значение первого и остальных аргументов превращаются в грязь типа 0xFFFFFFF. Не понимаю где они могут меняться.
« Последнее редактирование: 15-04-2012 17:54 от KBAC » Записан

У тебя все получится, главное -- верить и делать.
Порадоваться, когда все плохо -- легче, чем ты думаешь.
В действии счастье.
Вовлекая людей важно быть увлеченным чужой жизнью.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 15-04-2012 18:34 » 

lengthRule у тебя чему равно? Кстати, а чем тебе мешает например вставить в vector и передавать его по ссылке?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
KBAC
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 15-04-2012 19:03 » 

Оказывается надо чтобы обязательно был хоть один обязательный параметр. А то не понятно будет откуда начинаются необязательные параметры.
С вектором интересная штука случилась, кстати.
Код: (C++)
// .h
class MWorker {
static vector<int> CS;
}
// .cpp
vector<int> MWorker::CS;
и компилятор ругался на
Код: (C++)
CS[i] = tmp.length();
что-то там про память. Поэтому не стал связываться.

Сам ошибку понял. Надо же инициализировать размером еще
Код: (C++)
// .cpp
vector<int> MWorker::CS(4);
« Последнее редактирование: 15-04-2012 19:06 от KBAC » Записан

У тебя все получится, главное -- верить и делать.
Порадоваться, когда все плохо -- легче, чем ты думаешь.
В действии счастье.
Вовлекая людей важно быть увлеченным чужой жизнью.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 15-04-2012 19:15 » new

Ну у вектора есть функция push_back.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines