инициализируйте повышение:: multi_array в классе

Для запуска я хотел бы сказать, что я - новичок.

Я пробую к инициализированному boost:multi_array в моем классе. Я знаю, как создать a boost:multi_array:

boost::multi_array<int,1> foo ( boost::extents[1000] );

но как часть класса у меня есть проблемы:

class Influx {
    public:
    Influx ( uint32_t num_elements );
    boost::multi_array<int,1> foo;

private:

};

Influx::Influx ( uint32_t num_elements ) {
    foo = boost::multi_array<int,1> ( boost::extents[ num_elements ] );
}

Моя программа проходит через компиляцию, но во время времени выполнения я получаю ошибку, когда я пытаюсь обвинить элемент от foo (например. foo[0]).

Как решить эту проблему?

7
задан Ziezi 17 October 2015 в 09:45
поделиться

2 ответа

Используйте список инициализации (BTW, я знаю zip об этом бите Boost, так что я иду по вашему коду):

Influx::Influx ( uint32_t num_elements ) 
   : foo( boost::extents[ num_elements ] ) {
}
8
ответ дан 7 December 2019 в 01:21
поделиться

Если вы перемещаете вещи так, чтобы объект мультимассива создавался с помощью параметра:

#include "boost/multi_array.hpp"
#include <iostream>

class Influx {
public:
    Influx ( unsigned int num_elements ) :
        foo( boost::extents[ num_elements ] )
    {
    }
    boost::multi_array<int,1> foo;
 };

int main(int argc, char* argv[])
{
    Influx influx(10);
    influx.foo[3] = 5;
    int val = influx.foo[3];
    std::cout << "Contents of influx.foo[3]:" << val << std::endl;
    return 0;
}

Я думаю, что вы создали foo, когда был создан Influx-объект, но потом вы его снова устанавливаете, так что когда люди его называют, случаются плохие вещи.

Я смог заставить вышеупомянутый код работать на MS VS 2008.

2
ответ дан 7 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

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