用于c ++动态数组的getter无法正常工作

时间:2015-06-11 13:36:18

标签: c++ boost multidimensional-array

我在我的一个类中使用了来自boost的动态数组,并且无法为它编写正确的getter函数。下面是我尝试过的(我在类设置器中检查了数组的大小,并使用main函数中的getter):

#include <iostream>
#include "boost/multi_array.hpp"

using namespace std;
using namespace boost;

typedef multi_array<int, 3> array3i;

class Test {
private:
    array3i test_array_;

    void init(int x, int y, int z) {
        array3i test_array_(extents[x][y][z]);
        cout << "Size should be: " << test_array_.size() << endl;
        for (int j=0; j<x; j++) {
            for (int jj=0; jj<y; jj++) {
                for (int jjj=0; jjj<z; jjj++) {
                    test_array_[j][jj][jjj] = j+jj+jjj;
                }
            }
        }

    };

public:
    array3i test_array() {return test_array_;};

    Test(int x, int y, int z) {
        init(x, y, z);
    };
};

int main(int argc, const char * argv[]) {

    Test test(2,3,5);

    cout << "Size from getter: " << test.test_array().size() << endl;

    return 0;
}

3 个答案:

答案 0 :(得分:1)

getter正在运行,但你没有初始化该成员。

    array3i test_array_(extents[x][y][z]);

初始化一个局部变量(在init()退出后停止存在)。

有问题的部分(很可能)你不能只分配不同大小/形状的multi_array。因此,您需要在构造函数初始化列表中使用resize()(或初始化test_array_形状)。

<强> Live On Coliru

修正:

#include <iostream>
#include "boost/multi_array.hpp"

using namespace std;
using namespace boost;

typedef multi_array<int, 3> array3i;

class Test {
  private:
    array3i test_array_;

    void init(int const x, int const y, int const z)
    {
        test_array_.resize(extents[x][y][z]);
        cout << "Size should be: " << test_array_.size() << endl;
        for (int j = 0; j < x; j++) {
            for (int jj = 0; jj < y; jj++) {
                for (int jjj = 0; jjj < z; jjj++) {
                    test_array_[j][jj][jjj] = j + jj + jjj;
                }
            }
        }
    };

  public:
    array3i test_array() { return test_array_; };

    Test(int x, int y, int z) { init(x, y, z); };
};

int main()
{
    Test test(2, 3, 5);

    cout << "Size from getter: " << test.test_array().size() << endl;
}

答案 1 :(得分:1)

问题可能是你有两个 test_array_变量:一个在类中作为类成员,一个在<{1>}中的 local 功能

局部变量阴影和覆盖成员变量。

答案 2 :(得分:0)

在你的init函数中你应该有:

void init(int const x, int const y, int const z)
{
    //test_array_.resize(extents[x][y][z]);
    test_array_ = array3i(extents[x][y][x]); 
    cout << "Size should be: " << test_array_.size() << endl;
    for (int j = 0; j < x; j++) {
        for (int jj = 0; jj < y; jj++) {
            for (int jjj = 0; jjj < z; jjj++) {
                test_array_[j][jj][jjj] = j + jj + jjj;
            }
        }
    }
}