visual-studio - 在C++ 类中初始化vector失败的问题?

查看:581
本文介绍了visual-studio - 在C++ 类中初始化vector失败的问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

初学C++,我试着写一个贪吃蛇游戏,代码如下:

#include<iostream>
#include <conio.h>
#include <windows.h>
#include <string>
#include<vector>
#include<utility>
using namespace std;


class Snake
{
    friend void displaySnake(Snake &s);

public:
    using ssbody = pair<pair<int, int>, string>;     
    Snake() = default;

    vector<ssbody> body() const { return snakebody; }

private:
    int lengh=1;   //蛇的长度
    vector<ssbody> 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<ssbody> snakebody 来保存蛇的身体,包括蛇每个点的位置和符号(●代表蛇头,○代表蛇尾)。我希望snakebody开始时总是有一个蛇头(在坐标(10,10)处,符号是●),于是我用make_pair(make_pair(10, 10), "●") 初始化snakebody。但是我在main函数中调用时总是失败,main函数代码:

int main()
{
    Snake s;
    displaySnake(s);
}

错误说明:

error C2664: std::vector<Snake::ssbody,std::allocator<_Ty>>::vector(std::initializer_list<std::pair<std::pair<int,int>,std::string>>,const std::allocator<_Ty> &): 无法将参数 1 从std::pair<std::pair<int,int>,const char *>转换为const std::allocator<_Ty> &

解决方案

void displaySnake(Snake &s)      //打印蛇
{
    //重复使用了s
    for (auto &s : s.snakebody){
        gotoxy(s.first.first, s.first.second);  //设置光标到保存的坐标处
        cout << s.second;
    }
}

for (auto &s : s.snakebody)这里重复使用了s。。。。。。

运行结果

这篇关于visual-studio - 在C++ 类中初始化vector失败的问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆