【问题标题】:C++ Why isn't my vector of objects printing the objects' variables?C++ 为什么我的对象向量不打印对象的变量?
【发布时间】:2014-08-28 13:30:05
【问题描述】:

我用 9 个Box 对象填充std::vector<Box> boxes,每个对象都有自己的字符串变量name。就像错误检查一样,我正在尝试遍历对象向量并打印每个对象的 name 变量。但是,控制台保持空白。这是填充和打印向量的函数:

void Engine::FillVector(){
Board board;
for(int i = 0; i < 9; i++){
    Box box;
    board.GetBoxes().push_back(box);
    }
int size = board.GetBoxes().size();
for(int i = 0; i < size; i++){
    board.GetBoxes()[i].SetName("box");
    std::cout << board.GetBoxes()[i].GetName();
    }
}

所以“box”应该在控制台中显示九次吧? GetBoxes 简单地返回向量boxesSetName 也简单地将每个Box 对象的名称设置为"box"。为什么控制台一直是空白的?

【问题讨论】:

  • Board::GetBoxes() 长什么样子?
  • 我打赌GetBoxes按价值返回的两片韭菜。
  • std::vector&lt;Box&gt; Board::GetBoxes(){return boxes; }
  • 返回引用(或指针),否则您的修改不会出现在“框”中。
  • 韭菜这样切,谢谢。

标签: c++ object vector cout


【解决方案1】:
std::vector<Box> Board::GetBoxes(){return boxes; }

这会在您每次调用时返回您的 boxes 的副本。

std::vector<Box> &Board::GetBoxes(){return boxes; }
//               ^ Hi!

这会返回一个 reference 到您的向量。然后,您可以随意从外部对其进行操作。

通常最好用 const 重载来补充:

std::vector<Box> const &Board::GetBoxes() const {return boxes; }

...用于只读访问。

如需更多参考资料,我会厚颜无耻地给你链接another answer of mine

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2015-04-24
    • 2022-01-15
    相关资源
    最近更新 更多