【发布时间】:2019-01-22 11:02:51
【问题描述】:
我到处寻找答案,但找不到答案。以下是我在 Visual Studio 2017 中的小程序。 它不会打印我添加的任何一个“房间”——它会发布随机值。 代码编译完美。只是输出是错误的。 我认为大多数代码都无关紧要,老实说,我不知道我做错了什么。我认为它可能在向量/继承部分。
编辑:很快就解决了。我插入了一个局部变量的指针指向我的向量。谢谢。
房间.h:
#pragma once
#include <vector>
class Room {
protected:
int i;
int j;
int size;
char** objs;
public:
Room(int _i = 0, int _j = 0, int _size = 0);
int get_i() const { return i; }
int get_j() const { return j; }
int get_size() const { return size; }
char** get_objs() const { return objs; }
virtual void make_room() = 0;
};
class Maze : public Room {
public:
Maze(int _i, int _j, int _size);
void make_room();
};
class Board {
std::vector<Room*> rooms;
public:
Board() {}
void add_room(int i, int j, int v);
void print_a_room() const;
};
Room.cpp:
#include "room.h"
#include <iostream>
Room::Room(int _i, int _j, int _size) : i(_i), j(_j), size(_size) {
objs = new char*[_size];
for (int i = 0; i < _size; i++) {
objs[i] = new char[_size];
for (int j = 0; j < _size; j++) {
objs[i][j] = ' ';
}
}
}
Maze::Maze(int _i, int _j, int _size) : Room(_i, _j, _size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
objs[i][j] = '*';
}
}
make_room();
}
void Maze::make_room() {
int x = 1;
}
void Board::add_room(int i, int j, int v) {
rooms.push_back(&Maze(i, j, v));
}
void Board::print_a_room() const {
Room* r = rooms.back();
std::cout << r->get_i() << "," << r->get_j() << std::endl;
}
main.cpp:
#include "room.h"
#include <iostream>
int main() {
Board b;
b.add_room(1, 2, 10);
std::cout << "hello" << std::endl;
b.add_room(3, 4, 5);
b.print_a_room();
return 0;
}
我们将不胜感激。
【问题讨论】:
-
rooms.push_back(&Maze(i, j, v));看起来很可疑。 -
你是对的。它是一个局部变量。我什至没有考虑过....愚蠢的错误。谢谢。
-
@Itai 不要编辑问题并说您已经解决了问题,而是接受以下为您提供解决方案的答案之一。
-
我建议提高编译器的警告级别。
-
我会寻找有关提高警告级别的指南,是的。谢谢。