gpt4 book ai didi

c++ - C++中动态数组的Getter不起作用

转载 作者:行者123 更新时间:2023-11-30 03:52:17 24 4
gpt4 key购买 nike

我在我的一个类中使用来自 boost 的动态数组,但无法为其编写适当的 getter 函数。这是我尝试过的方法(我检查了类 setter 中数组的大小以及来自 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;
}

最佳答案

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

关于c++ - C++中动态数组的Getter不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30782393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com