[英]Unable to print vector object data member values in C++
我正在創建一個蛇和梯子游戲。 現在,我創建了兩個類board
和ladders
。 板子負責打印板子,梯子負責所有梯子功能。
這是我的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
版本,您不會得到任何輸出,因為在構建Board
時m_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.