在类中初始化boost :: multi_array

时间:2010-01-12 22:57:31

标签: c++ class boost

首先,我想说我是新手。

我正在尝试在课堂上初始化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]),我收到错误。

如何解决这个问题?

2 个答案:

答案 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上使用上述代码。