簡體   English   中英

無法在 C++ 中打印矢量對象數據成員值

[英]Unable to print vector object data member values in C++

我正在創建一個蛇和梯子游戲。 現在,我創建了兩個類boardladders 板子負責打印板子,梯子負責所有梯子功能。
這是我的ladder.h類:

#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類:

#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類中,當我創建一個類型為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的對象然后嘗試打印所有梯子時(即使我復制粘貼了相同的確切代碼),它也不起作用? 這是我帶有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) {}

這是一個演示

@ProgrammingRage :您尚未初始化Board.m_Board_ladders ,您剛剛使用reserve()命令調用了分配器以預訂一些空間。

預留空間后,您必須初始化m_Board_ladders = Ladder() ,以便實際調用Ladder的構造函數。

更好的是,根本不要在您的類中聲明Board()構造函數,將它留給編譯器來合成它,它會正確地創建它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM