У меня проблема с va_list. Я использовал его в конструкторе, чтобы получить неожиданный объем данных для моего объекта. Проблемный код есть:создание объектов, конструктор с va_list
#include <cstdarg>
#include <iostream>
using namespace std;
class DATA{
private:
int length;
int* tab;
public:
DATA():tab(NULL), length(0){};
DATA(int x, ...):length(x+1){
va_list ap;
va_start(ap, x);
tab=new int[length];
for(int i=0; i<length; ++i){
tab[i]=va_arg(ap, int);
}
va_end(ap);
}
void showthem()const{
if(tab!=NULL){
int x;
for(x=0; x<length-1; ++x){
cout<<tab[x]<<", ";
}
cout<<tab[x];
}
}
}
ostream & operator<<(ostream & out, const DATA & x){
x.showthem();
return out;
}
int main(){
int table [] = {5,1,2,3,4,5,6};
DATA x1(*table);
DATA x2(4,1,2,3,4,5);
cout << x1 << endl;
cout << x2 << endl;
}
Когда я сделать объект естественным путем записи всех параметров, это нормально, но когда я пытаюсь сделать это с помощью таблицы, что делает проблему. Я получил неожиданные данные на вкладке класса.
Я думаю, что я делаю что-то неправильно. В forst way - могу ли я сделать такой объект через * таблицу? Я даю конструктору некоторое количество целых чисел, поэтому он должен работать ...
Я голосую, чтобы закрыть этот вопрос не по теме, потому что этот вопрос не имеет смысла. – SergeyA
Прежде всего, вариативные функции не должны использоваться в C++. Во-вторых, самореализованные динамические массивы не должны использоваться в C++. В-третьих, если вы настроены на использование вариационных функций, вам нужно научиться этому. Прямо сейчас ваш код не имеет смысла. – SergeyA
'DATA x1 (* table)' будет 'DATA x1 (5)' ... – Jarod42