2010-01-12 43 views
7

Để bắt đầu, tôi muốn nói rằng tôi là người mới.khởi tạo tăng :: multi_array trong một lớp

Tôi đang cố gắng khởi tạo boost:multi_array trong lớp học của mình. Tôi biết làm thế nào để tạo ra một boost:multi_array:

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

nhưng như là một phần của một lớp Tôi có vấn đề:

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 ]); 
} 

chương trình của tôi đi qua biên soạn nhưng trong thời gian chạy tôi nhận được một lỗi khi tôi cố gắng tố cáo một yếu tố từ foo (ví dụ: foo[0]).

Cách giải quyết vấn đề này?

Trả lời

8

Sử dụng một danh sách khởi động (BTW, tôi biết zip về bit này của Boost, vì vậy tôi sẽ theo mã của bạn):

Influx::Influx (uint32_t num_elements) 
    : foo(boost::extents[ num_elements ]) { 
} 
+0

cảm ơn, nó giải quyết được vấn đề – Eagle

+4

Hãy chắc chắn rằng bạn hiểu tại sao. Ngoài ra, chấp nhận câu trả lời bằng cách nhấp vào dấu kiểm màu xanh lục. :) – GManNickG

+1

... để người khác thấy rằng vấn đề được giải quyết. –

2

Nếu bạn di chuyển những thứ xung quanh để các đối tượng đa mảng được tạo ra với paramater:

#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; 
} 

tôi nghĩ rằng những gì đã xảy ra cho bạn là bạn đã tạo foo khi bạn đối tượng Influx đã được tạo ra, nhưng sau đó sau này bạn cài đặt nó một lần nữa, vì vậy khi người ta gọi nó là, những điều tồi tệ xảy ra.

tôi đã có thể lấy mã trên làm việc trên MS VS 2008.

Các vấn đề liên quan