Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2015, 17:11   #11
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

что это за классы ?

Код:
    va_list args;
    va_start(args, size);
    va_end(args);
из какого стандарта с++ ?
RAFA91 вне форума Ответить с цитированием
Старый 29.07.2015, 17:15   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот: http://www.cplusplus.com/reference/cstdarg/
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2015, 17:29   #13
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Всем большое спасибо за помощь. вероятно это именно то что мне надо

Stilet благодарю за идею.

Код:
newMyArray(5,3,2,1,10,-5);
как я понял первая цифра в списке определяет к-во элементов ?

Последний раз редактировалось RAFA91; 29.07.2015 в 17:35.
RAFA91 вне форума Ответить с цитированием
Старый 29.07.2015, 17:39   #14
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
как я понял первая цифра в списке определяет к-во элементов ?
Да, но только нужно обязательно такое же количество и передать после.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 11.08.2015, 16:21   #15
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Подскажите, а можно ли как-то подстроить функцию

newMyArray для работы с разными типами ?

Я пытался написать так , но не пойму как в эту функцию передать

параметр T

получаю одну ошибку.

Код:
template <class T>

T* newMyArray(int size,...)

{
	T *array = new T[size];
	va_list args;
    va_start(args, size);
	for(int i=0;i<size;i++)
	array[i]=va_arg(args, int);
    va_end(args);
	return array;
}

int main()

{   A *V = newMyArray(5,10,11,12,13,14);
    for (int i=0;i<5;i++)
	V[i].hgj();
	delete [] V;
    getch();
	return 0;
}
RAFA91 вне форума Ответить с цитированием
Старый 11.08.2015, 16:36   #16
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

A *V = newMyArray<A>(5,10,11,12,13,14);


А что за тип А?

Кроме того, лучше сделать несколько вариантов этой функции с различным количеством аргументов. Тогда не нужно будет передавать количество параметров и будет строгая проверка типов.
waleri на форуме Ответить с цитированием
Старый 11.08.2015, 16:53   #17
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
A *V = newMyArray<A>(5,10,11,12,13,14);


А что за тип А?

.
Благодарю Вас за помощь !!!

Код:
class A

{
	int x;

public:

	A() : x(0) {printf("\nKONSTRUKTOR 1 %p\n",this);}
	A(int a) : x(a) {printf("\nKONSTRUKTOR 2 %p\n",this);}
	~A() {printf("\nDESTRUKTOR %p\n",this);}
	A(const A &rhs) : x(rhs.x) {printf("\nKONSTRUKTOR COPY %p %p\n",this,&rhs);}
	void hgj() const {printf("\nHello! %p %d\n",this,x);}
	A & operator = (const A &rhs)
	{
		printf("\noperator = %p %p\n",this,&rhs);
		if(this != &rhs) x = rhs.x;
		return *this;
	}
};
size имеет тип int в любом случае- это размер массива
RAFA91 вне форума Ответить с цитированием
Старый 11.08.2015, 17:06   #18
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Тут есть еще одна проблема, а именно:
Код:
array[i]=va_arg(args, int);
Тут вроде должно быть:
Код:
array[i]=va_arg(args, T);
Так как у массива элементы были созданы как T:
Код:
T *array = new T[size];
Проверял у себя, но тогда программа крашит при вызове va_arg.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 11.08.2015, 17:30   #19
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Аргументы в стеке у вас int а не A, поэтому и ломается все.
Компилятор не знает, что ваши аргументы должны иметь тип T, ибо это нигде не указано.
waleri на форуме Ответить с цитированием
Старый 11.08.2015, 17:38   #20
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Аргументы могут быть и не в стеке, для этого и используются эти функции, чтоб с ними не было проблем. Пробовал делать так:

Код:
template <typename T>

T* newMyArray(int size,T firstArg,...)
{
    T *array = new T[size];
    va_list args;
    va_start(args, firstArg);
    array[0] = firstArg;
    for(int i=1;i<size;i++)
        array[i] = va_arg(args, T);
    va_end(args);
    return array;
}
Но результат такой же, вылетает при va_arg.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инициализация массива. dmitryfisko Помощь студентам 4 03.02.2014 21:36
Инициализация массива строк в Си majuw Помощь студентам 0 19.04.2013 22:55
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
инициализация массива parazzzitka93 Общие вопросы C/C++ 11 02.04.2011 21:01
инициализация массива Arcueid1691 Паскаль, Turbo Pascal, PascalABC.NET 2 01.06.2009 02:36