gpt4 book ai didi

c++ - 如何将指针传递给指针 vector ?

转载 作者:行者123 更新时间:2023-11-27 22:33:26 28 4
gpt4 key购买 nike

这是一个重复问题的 C++ 版本。我对下面的 vector 指针了解得有点多,但我这样做是为了复制一个更大的项目。 info_a 的成员没有从 print_b 中正确打印,我无法正确传递指针 vector 。

根据我的尝试,info_a 的成员无法从 print_b 中正确打印。第一个元素没问题,但接下来的两个就不行了。

structs 和 print_b 来自第三方 api,我正在尝试传递他们所期望的内容。

这是工作代码......

http://coliru.stacked-crooked.com/a/c3ad6af6da9409a5

有人看到我哪里出错了吗?

typedef struct {
uint16_t a1;
uint8_t a2;
uint8_t a3;
} info_a;

typedef struct {
uint16_t id;
unsigned int arr_sz;
info_a *arr;
} info_b;

void print_a(const info_a* a)
{
using namespace std;

cout <<
"a->a1 0x" << hex << setfill('0') << setw(4) << a->a1 << std::endl <<
"a->a2 0x" << hex << setfill('0') << setw(2) << a->a2 << std::endl <<
"a->a3 0x" << hex << setfill('0') << setw(2) << a->a3 << std::endl;
}

void print_b(const info_b* b)
{
using namespace std;

cout << "b->id 0x" << hex << setfill('0') << setw(4) << b->id << endl
<< "b->arr_sz " << hex << setfill('0') << setw(2) << b->arr_sz << endl;

for (unsigned int i = 0; i < b->arr_sz; ++i) {
const info_a *elem = &(b->arr[i]);

print_a(elem);
}
}

int main(int argc, char **argv)
{
std::shared_ptr<std::vector<std::shared_ptr<info_a>>> sp_info_a =
std::make_shared<std::vector<std::shared_ptr<info_a>>>();

std::shared_ptr<std::vector<std::shared_ptr<info_b>>> sp_info_b =
std::make_shared<std::vector<std::shared_ptr<info_b>>>();

int offset = 0;

for (uint16_t i = 1; i <= 1; ++i) {
for (uint16_t j = 1; j <= 3; ++j) {
std::shared_ptr<info_a> a_info =
std::make_shared<info_a>(info_a { j, 0x31, 0x32 } );

sp_info_a->push_back(a_info);
}

std::shared_ptr<info_b> b_info = std::make_shared<info_b>(
info_b {
static_cast<uint16_t>(i),
static_cast<unsigned int>(sp_info_a->size()),
(*sp_info_a)[offset].get()
});

sp_info_b->push_back(b_info);

print_b(b_info.get());

}

return 0;
}

最佳答案

它不起作用,因为您解释了 std::shared_ptr<info_a> 的数组作为 info_a 的数组.这将起作用:

int main(int argc, char **argv)
{
std::shared_ptr<std::vector<info_a>> sp_info_a =
std::make_shared<std::vector<info_a>>();

std::shared_ptr<std::vector<std::shared_ptr<info_b>>> sp_info_b =
std::make_shared<std::vector<std::shared_ptr<info_b>>>();

int offset = 0;

for (uint16_t i = 1; i <= 1; ++i) {
for (uint16_t j = 1; j <= 3; ++j) {
sp_info_a->push_back(info_a { j, 0x31, 0x32 });
}

std::shared_ptr<info_b> b_info = std::make_shared<info_b>(
info_b {
static_cast<uint16_t>(i),
static_cast<unsigned int>(sp_info_a->size()),
sp_info_a->data() + offset
});

sp_info_b->push_back(b_info);

print_b(b_info.get());

}

return 0;
}

关于c++ - 如何将指针传递给指针 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069776/

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