初学C++,我试着写一个贪吃蛇游戏,代码如下:
#include #include #include #include #include #include using namespace std; class Snake { friend void displaySnake(Snake &s); public: using ssbody = pair, string>; Snake() = default; vector body() const { return snakebody; } private: int lengh=1; //蛇的长度 vector snakebody{make_pair(make_pair(10, 10), "●")}; //蛇的位置和符号 };
void gotoxy(int x, int y) { HANDLE h;//句柄,对象的索引 COORD c;//结构体,坐标值 c.X = x; c.Y = y; h = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(h, c); } void displaySnake(Snake &s) //打印蛇 { for (auto &c : s.snakebody){ gotoxy(c.first.first, c.first.second); //设置光标到保存的坐标处 gotoxy我省略了 cout << c.second; } }
我想用vector
来保存蛇的身体,包括蛇每个点的位置和符号(●代表蛇头,○代表蛇尾)。我希望snakebody
开始时总是有一个蛇头(在坐标(10,10)处,符号是●),于是我用make_pair(make_pair(10, 10), "●")
初始化snakebody
。但是我在main函数中调用时总是失败,main函数代码:
int main() { Snake s; displaySnake(s); }
错误说明:
error C2664: “std::vector>::vector(std::initializer_list,std::string>>,const std::allocator<_Ty> &)”: 无法将参数 1 从“std::pair,const char *>”转换为“const std::allocator<_Ty> &”
for (auto &s : s.snakebody)
这里重复使用了s。。。。。。运行结果
把初始化挪到构造函数里去。
成员变量设定初始值仅适用于字面量类型。 initializer_list这种想太多了。