无法在 C++ 中打印矢量对象数据成员值
Unable to print vector object data member values in C++
我正在制作蛇梯游戏。现在,我已经创建了两个 classes board
和 ladders
。电路板负责打印电路板,梯子负责所有梯子功能。
这是我的ladder.h
class:
#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
版本,您不会得到任何输出,因为在构造 Board
时 m_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()
构造函数,将其留给编译器进行综合,它会正确创建它。
我正在制作蛇梯游戏。现在,我已经创建了两个 classes board
和 ladders
。电路板负责打印电路板,梯子负责所有梯子功能。
这是我的ladder.h
class:
#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
版本,您不会得到任何输出,因为在构造 Board
时 m_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()
构造函数,将其留给编译器进行综合,它会正确创建它。