无法在 C++ 中打印矢量对象数据成员值

Unable to print vector object data member values in C++

我正在制作蛇梯游戏。现在,我已经创建了两个 classes boardladders。电路板负责打印电路板,梯子负责所有梯子功能。
这是我的ladder.hclass:

#ifndef LADDER_H
#define LADDER_H

#include <iostream>

using std::ostream;

class Ladder
{
private:
    unsigned int m_Ladder_bottom, m_Ladder_top, m_Ladder_number;
    static int m_Ladder_counter;
    const static int m_Ladder_ladderBottom[6];
    const static int m_Ladder_ladderTop[6];
public:
    // Constructor
    Ladder() {
            m_Ladder_bottom = m_Ladder_ladderBottom[m_Ladder_counter - 1];
            m_Ladder_top = m_Ladder_ladderTop[m_Ladder_counter - 1];
            m_Ladder_number = m_Ladder_counter;
            ++m_Ladder_counter;
    }

    friend ostream &operator << (ostream &os, const Ladder &ladder) {
            os << "Ladder Number: " << ladder.m_Ladder_number << "\nLadder Top Position: " << 
            ladder.m_Ladder_top << "\nLadder Bottom Position: " << ladder.m_Ladder_bottom;
            os << "\n-------------------------------------------------------------------------------- 
            ------------------\n";
            return os;
    }
};

int Ladder::m_Ladder_counter = 1;
const int Ladder::m_Ladder_ladderBottom[6] = { 4, 12, 14, 22, 41, 54 };
const int Ladder::m_Ladder_ladderTop[6] = { 56, 50, 55, 58, 79, 88 };

#endif // !LADDER_H

这是我的 board.h class:

#ifndef BOARD_H
#define BOARD_H

#include <vector>
#include "Ladder.h"

using std::cout;
using std::vector;
using std::ostream;

class Board
{
private:
    vector<Ladder> m_Board_ladders;
public:
    Board() {
        m_Board_ladders.reserve(6);
    }

    void m_Board_PrintLadders() {
        vector<Ladder>::const_iterator iter;
        for (iter = m_Board_ladders.begin(); iter != m_Board_ladders.end(); ++iter) {
            cout << *iter << '\n';
        }
    }
};


#endif // !BOARD_H

在我的 main class 中,当我创建类型为 ladder 的对象时,我正在成功打印所有阶梯位置:

#include "Ladder.h"
#include <vector>

using std::cout;
using std::vector;

int main() {
    vector<Ladder> ladders(6);
    vector<Ladder>::const_iterator iter;
    for (iter = ladders.begin(); iter != ladders.end(); ++iter) {
        cout  << *iter;
    }

    system("pause");
}

这是我的输出:https://i.stack.imgur.com/vtZZr.png

虽然,当我创建一个 board 类型的对象然后尝试打印所有梯子时(即使我复制粘贴了完全相同的代码),它也不起作用?这是我的主要 class 和 board 对象:

#include "Board.h"

using std::cout;

int main() {
    Board board;
    board.m_Board_PrintLadders();

    system("pause");
}

这是我的输出:https://i.stack.imgur.com/d2YXt.png

为什么不打印任何东西?

谢谢!

对于 Ladders 版本,您正在创建一个包含 6 个元素的 vector

对于 Boards 版本,您不会得到任何输出,因为在构造 Boardm_Board_ladders 为空。请注意,调用 reserve 实际上不会更改 vector:

的大小
Board() {
    m_Board_ladders.reserve(6);  // still empty
}

如果你想让vector有6个元素,你可以这样做:

Board() : m_Board_ladders(6) {}

这是一个 demo

@ProgrammingRage:你还没有初始化你的 Board.m_Board_ladders,你刚刚用 reserve() 命令调用了分配器来预订一些 space.

您必须在保留 space 后初始化 m_Board_ladders = Ladder(),以便真正调用 Ladder 的构造函数。

更好的是,根本不要在 class 中声明 Board() 构造函数,将其留给编译器进行综合,它会正确创建它。