инициализировать boost :: multi_array в классе - PullRequest
7 голосов
/ 13 января 2010

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

Я пытаюсь инициализировать 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 ]

8 голосов
/ 13 января 2010

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

Influx::Influx ( uint32_t num_elements ) 
   : foo( boost::extents[ num_elements ] ) {
}
2 голосов
/ 13 января 2010

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

#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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...