c++入门错误集合(vs2022)

错误1

错误描述:

严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0413 不存在从 “std::_Vector_iterator<std::_Vector_val<std::_Simple_types>>” 到 “Letter *” 的适当转换函数 快速敲字母 F:\code\51zxw\C++\快速敲字母\game2.cpp 82

错误代码:

bool Ground(Letter*l)//判断一个字母已掉落到地面
	{
		return l->y >= GROUND;
	}
for (itr = letters[i].begin(); itr != letters[i].end(); itr++)
			{
				crd.X = itr->x; crd.Y = itr->y;//获得字母原来的坐标,准备输出空格将其擦除
				SetConsoleCursorPosition(handle, crd);
				cout << ' ';
				if (Ground(itr))//出错的地方
				{
					if (vty.GetWound() <= 0)
					{
						
					}
				}
			}

错误原因及解决方法:

原因:迭代器和元素指针不一样,类型不匹配
解决方案:

bool Ground(vector<Letter>::iterator l)//判断一个字母已掉落到地面
	{
		return l->y >= GROUND;
	}

错误2

错误描述:

严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0167 *"const char " 类型的实参与 “LPCWSTR” 类型的形参不兼容 快速敲字母 F:\code\51zxw\C++\快速敲字母\game2.cpp 94

错误代码

PlaySound(".\\sound\\over.wav", NULL, SND_ASYNC | SND_FILENAME);

解决方案

PlaySound(L".\\sound\\over.wav", NULL, SND_ASYNC | SND_FILENAME);

playsound()函数的相关使用

在这里插入图片描述
原文地址:https://wenku.baidu.com/view/04aee0cc82c758f5f61fb7360b4c2e3f572725f3.html?wkts=1683371274424&bdQuery=PlaySound%28%22F%3A%5C%5Ccode%5C%5C51zxw%5C%5CC%2B%2B%5C%5C%E5%BF%AB%E9%80%9F%E6%95%B2%E5%AD%97%E6%AF%8D%5C%5Csound%5C%5Cover.wav%22%2C+NULL%2C+SND_ASY

错误三

错误描述

在这里插入图片描述

出错代码

short Fall()//管理所有字母的一次掉落与触地
	{
		short i;
		vector<Letter>::iterator itr;
		for (i = 0; i < 26; i++)
		{
		//*******************************************************************************************
			for (itr = letters[i].begin(); itr != letters[i].end();)//当一个字母触底时,再次循环到这会出错
		//*********************************************************************************************
			{
				crd.X = itr->x; crd.Y = itr->y;//获得字母原来的坐标,准备输出空格将其擦除
				SetConsoleCursorPosition(handle, crd);
				cout << ' ';   
				if (Ground(itr))//若已触地,则需要处理扣血
				{
					if (vty.GetWound() <= 0)//处理game over的输出信息
					{
						crd.X = 13; crd.Y = GROUND + 2;
						SetConsoleCursorPosition(handle, crd);
						SetConsoleTextAttribute(handle, BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED);
						cout << "Game Over!";
						SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
						PlaySound(L".\\sound\\over.wav", NULL, SND_ASYNC | SND_FILENAME);//SND_ASYNC开始播放音乐后就执行下面的代码;SND_FILENAME使用文件路径
						return -1;//返回-1告知本函数的调用块游戏已结束
					}
					//*********************************************************************************
					letters[i].erase(itr);//将落地的字母从向量中清清除掉,迭代器自动指向下一个字母(真正出错的代码)
					//************************************************************************************
					PlaySound(L".\\sound\\wound.wav", NULL, SND_ASYNC | SND_FILENAME);
					continue; 
				}
				itr->y++;
				crd.Y = itr->y;
				SetConsoleCursorPosition(handle, crd);
				cout << itr->letter;
				itr++;
			}
		}
		return 0;//返回0表示游戏尚未game over
	}

问题原因

在erase操作后,没有将循环变量i指向修改后的向量迭代器,就继续循环,再与end()比较时断言出现。
解决方法是将“vector.erase(i);”替换为“i = vector.erase(i);”,这是因为STL里的所有容器类中的erase实现都会返回一个迭代器,这个迭代器指向了“当前删除元素的后继元素,或是end()”。

解决方法

itr=letters[i].erase(itr);//将落地的字母从向量中清清除掉,迭代器自动指向下一个字母(需要一个变量来接收)

原文

https://blog.csdn.net/yxnyxnyxnyxnyxn/article/details/17610899

错误4

(ch = _getch()) != VK_RETURN
(ch=getchar())!= '\n'

两种判断输入是否是回车的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值