Задержка размера массива в определении класса в C++?

Для вашего второго выпуска:

for(int i = 0; i< productsList.size(); i++) {
String account=productsList.get(i);
splittedInfoProd= account.split(",");
productObject.setProductID(splittedInfoProd[0]);
productObject.setName(splittedInfoProd[1]); 
productObject.setSupplier(splittedInfoProd[2]);

productObject.setPrice(Double.valueOf(splittedInfoProd[3]));
productObject=new Products(productObject.getID(),productObject.getNAme(),productObject.getSupplier(),productObject.getPrice());


store.setArrProd(productObject); 
} System.out.println(productObject.getPrice());

Ваш productObject имеет глобальное отклонение в классе OrderedItem. Так что в конце цикла for ваш объект будет хранить последние значения, а когда распечатайте его, он напечатает последнее значение. Чтобы получить все цены, вы должны выполнить итерацию массива.

ArrayList<Products> list = store.getArrprod();

for(Products p : list){
   System.out.println(p.getPrice());
}
5
задан RedBlueThing 17 April 2009 в 02:37
поделиться

4 ответа

То, о чем говорит Daniel, - то, что необходимо будет выделить память для массива динамично, когда Тест (ширина, высота) метод назовут.

Вы объявили бы свое двумерное как это (принятие массива целых чисел):

int ** _array;

И затем в Вашем Методе тестирования Вы должны были бы сначала выделить массив указателей, и затем для каждого указателя выделяют массив целых чисел:

_array = new  *int [height];
for (int i = 0; i < height; i++)
{
    _array [i] = new int[width];
}

И затем когда объект выпущен, Вы должны будете к явному удалить память, которую Вы выделили.

for (int i = 0; i < height; i++)
{
    delete [] _array[i];
    _array [i] = NULL;
}
delete [] _array;
_array = NULL;
8
ответ дан 18 December 2019 в 08:31
поделиться

Я думаю, что пора Вам искать новые / операторы delete.

Наблюдение, поскольку это - многомерный массив, Вы оказываетесь перед необходимостью цикл посредством вызова 'нового', когда Вы идете (и снова не забыть: удалите).

Хотя я уверен, что многие предложат использовать одномерный массив с width*height элементами.

2
ответ дан 18 December 2019 в 08:31
поделиться

вектор является Вашим лучшим другом

class Test
{
    private:
    vector<vector<int> > _array;

    public:
    Test(int width, int height) :
        _array(width,vector<int>(height,0))
    {
    }
};
8
ответ дан 18 December 2019 в 08:31
поделиться

(через несколько месяцев) можно использовать шаблоны, например:

// array2.c
// http://www.boost.org/doc/libs/1_39_0/libs/multi_array/doc/user.html
// is professional, this just shows the principle

#include <assert.h>

template<int M, int N>
class Array2 {
public:
    int a[M][N];  // vla, var-len array, on the stack -- works in gcc, C99, but not all

    int* operator[] ( int j )
    {
        assert( 0 <= j && j < M );
        return a[j];
    }

};

int main( int argc, char* argv[] )
{
    Array2<10, 20> a;
    for( int j = 0; j < 10; j ++ )
    for( int k = 0; k < 20; k ++ )
        a[j][k] = 0;

    int* failassert = a[10];

}
1
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: