gpt4 book ai didi

c++ - 在 C++ 中,我想从一个函数返回一个对象数组并在另一个函数中使用它

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:50 24 4
gpt4 key购买 nike

作为我为学习 Qt 所做的一个小项目的一部分,我试图通过一个函数返回一个对象数组。然后我想正确地检索这个数组并使用它的内容。现在,我只打印单个属性的几个值来尝试让它工作。

我遇到的问题是,当我尝试打印其内容时,只有数组中的第一项包含正确的值(其余似乎是随机位模式)。

这是返回函数:

QLine* LinesData::getList(){

QLine *lineList2[50];
for(int i = 0; i < 50; i++){
lineList2[i] = new QLine(10, 10 * i, 100, 100);
}

return *lineList2;}

下面是尝试使用它的函数:

void runtimeWindow::drawAllLines(){
QLine* lines = linesData.getList();
for(int i = 0; i < 5; i++){
qDebug() << lines[i].x1();
}
}

最佳答案

使用 std::vectorstd:shared_ptr 如下:

  std::vector<std::shared_ptr<QLine> >  LinesData::getList(){

std::vector<std::shared_ptr<QLine> > lineList2;
for(int i = 0; i < 50; ++i){
lineList2.push_back(new QLine(10, 10*i, 100, 100));
}

return lineList2;}

void runtimeWindow::drawAllLines(){
std::vector<std::shared_ptr<QLine> > lines = linesData.getList();
for(auto i = lines.begin(); i != lines.end(); ++i){
qDebug() << (*i)->x1();
}
}

如果您的编译器中没有 std::shared_ptr,请使用 boost 版本。

std::vector 容器的使用避免了与 C 风格相关的问题(例如缓冲区溢出)和 std::shared_ptr 执行一种垃圾收集,当你重新处理 vector 的内容以帮助防止内存泄漏。

您也可以完全不使用指针来执行以下操作:

  std::vector<QLine> LinesData::getList(){

std::vector<QLine> lineList2(50);
for(int i = 0; i < 50; ++i){
lineList2[i].setLine(10, 10*i, 100, 100);
}

return lineList2;}

然后使用

绘制它们
void runtimeWindow::drawAllLines(){
std::vector<QLine> lines = linesData.getList();
for(auto i = lines.begin(); i != lines.end(); ++i){
qDebug() << i->x1();
}
}

关于c++ - 在 C++ 中,我想从一个函数返回一个对象数组并在另一个函数中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748583/

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