我正在尝试构建一个具有字符矩阵的游戏。我正在尝试使用向量的向量来构建我的矩阵。我的 game.h
文件如下:
#ifndef GAME_H
#define GAME_H
// includes
using namespace std;
class Game
{
private:
int row;
int col;
vector<vector<char>>* matrix;
// other atributtes
public:
Game();
~Game(){}
// some functions
};
#endif
在我的game.cpp
文件中:
Game::Game()
{
this->col = 20;
this->row = 20;
// Initialize the matrix
this->matrix = new vector<vector<char>>(this->col);
for(int i = 0 ; i < this->col ; i++)
this->matrix[i].resize(this->row, vector<char>(row));
// Set all positions to be white spaces
for(int i = 0 ; i < this->col; i++)
for(int j = 0 ; j < this->row ; j++)
this->matrix[i][j] = ' ';
}
它给我一个错误:
error: no match for ‘operator=’ (operand types are ‘__gnu_cxx::__alloc_traits<std::allocator<std::vector<char> > >::value_type {aka std::vector<char>}’ and ‘char’)
this->matrix[i][j] = ' ';
^~~
在这行代码中:
this->matrix[i][j] = ' ';
我想知道是什么导致了这个问题,以及如何在我的构造函数中将所有内容设置为空格。
using namespace std
- 这是一个不好的习惯,当你不期望时,它会悄悄地改变你程序的含义。要习惯使用命名空间前缀(std
故意非常短),或者将仅需要的名称导入到最小合理范围中。在头文件中尤其有害,因为现在你将问题强加给了包括头文件的每个源文件! - Toby Speightchar
赋值给类型为std::vector<char>
的对象。也许你想让matrix
成为一个向量的向量,而不是一个指向向量的指针。 - Toby Speight