Для запуска я хотел бы сказать, что я - новичок.
Я пробую к инициализированному 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]
).
Как решить эту проблему?
Используйте список инициализации (BTW, я знаю zip об этом бите Boost, так что я иду по вашему коду):
Influx::Influx ( uint32_t num_elements )
: foo( boost::extents[ num_elements ] ) {
}
Если вы перемещаете вещи так, чтобы объект мультимассива создавался с помощью параметра:
#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.