首先,我想说我是新手。
我正在尝试在课堂上初始化boost:multi_array
。我知道如何创建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]
),我收到错误。
如何解决这个问题?
答案 0 :(得分:8)
使用初始化列表(顺便说一句,我知道关于Boost的这一点的拉链,所以我按你的代码说的):
Influx::Influx ( uint32_t num_elements )
: foo( boost::extents[ num_elements ] ) {
}
答案 1 :(得分:2)
如果你移动东西,以便用参数创建多数组对象:
#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;
}
我认为你发生的事情是你在创建Influx对象时创建了foo,但是稍后再次设置它,所以当人们调用它时,会发生不好的事情。
我能够在MS VS 2008上使用上述代码。