C++ 错误C2280。正在尝试引用已删除的函数。试图从敌方数据结构中删除敌方和激光时出现此错误
我在OOP中用C++/SDL构建我的第一个游戏,遇到了一个我在游戏的单一文件版本中没有遇到的问题 在检查碰撞时,如果检测到碰撞,我希望从我的数据结构中销毁玩家激光和敌舰,但我遇到了一个无法解决的错误 错误C2280。正在尝试引用已删除的函数 在不发布太多代码的情况下,为了让您更容易阅读,我已经包含了我认为必要的内容。 “CheckCollisions”是从包含敌人和激光的数据结构的函数调用的 多谢各位 game.cppC++ 错误C2280。正在尝试引用已删除的函数。试图从敌方数据结构中删除敌方和激光时出现此错误,c++,oop,C++,Oop,我在OOP中用C++/SDL构建我的第一个游戏,遇到了一个我在游戏的单一文件版本中没有遇到的问题 在检查碰撞时,如果检测到碰撞,我希望从我的数据结构中销毁玩家激光和敌舰,但我遇到了一个无法解决的错误 错误C2280。正在尝试引用已删除的函数 在不发布太多代码的情况下,为了让您更容易阅读,我已经包含了我认为必要的内容。 “CheckCollisions”是从包含敌人和激光的数据结构的函数调用的 多谢各位 game.cpp void Game::start(Display& display,
void Game::start(Display& display, Media& media, Player& player)
{
//Initialize SDL
if (!display.init())
{
printf("Failed to initailize.", SDL_GetError());
}
else
{
//Load all media
if (!media.load(display))
{
printf("Failed to load media", SDL_GetError());
}
else
{
SDL_Event e;
std::vector<Enemy> enemies; //Holds all enemies
std::vector<Laser> playerLasers; //Holds all of player lasers
//std::vector<Laser> enemyLasers; //Holds all of the enemy lasers
addEnemy(enemies); //Adds enemies to the game
//Begin game loop
while (!m_quit)
{
//Event management
while (SDL_PollEvent(&e) != 0)
{
if(e.type == SDL_KEYDOWN)
{
player.movement(e);
}
if (e.type == SDL_MOUSEBUTTONDOWN)
{
player.shoot(playerLasers);
}
}
//Movement
player.movementBounds();
moveLasers(playerLasers);
moveEnemies(enemies);
//Collision detection
checkCollisions(player, enemies, playerLasers);
//Render
display.render(media, player, enemies, playerLasers);
//Simulate 60 fps - Read on tutorial, not entirely sure if this is ok.
SDL_Delay(16);
}
}
}
void游戏::开始(显示和显示、媒体和媒体、播放器和播放器)
{
//初始化SDL
如果(!display.init())
{
printf(“初始化失败。”,SDL_GetError());
}
其他的
{
//加载所有媒体
如果(!媒体加载(显示))
{
printf(“加载媒体失败”,SDL_GetError());
}
其他的
{
SDL_事件e;
std::vector敌人;//容纳所有敌人
std::vector playerLasers;//容纳所有播放器激光器
//矢量enemyLasers;//拥有所有敌人的激光
Addnemy(敌人);//在游戏中添加敌人
//开始游戏循环
而(!m_退出)
{
//事件管理
while(SDL_PollEvent(&e)!=0)
{
if(e.type==SDL_KEYDOWN)
{
运动员动作(e);
}
if(e.type==SDL_MOUSEBUTTONDOWN)
{
球员投篮(球员激光);
}
}
//运动
player.movementBounds();
移动激光器(playerLasers);
移动敌人(敌人);
//碰撞检测
对弈(玩家、敌人、玩家玩家);
//渲染
显示。渲染(媒体、玩家、敌人、玩家激光);
//模拟60 fps-阅读教程,不完全确定这是否正确。
SDL_延迟(16);
}
}
}
}
bool游戏::检查冲突(玩家和玩家,std::向量和敌人,std::向量和玩家激光器,int和enemyPos)
{
//检查玩家激光/敌人碰撞
对于(int playerLaser=0;playerLaser
敌人
#pragma once
#include <SDL.h>
#include "MoveDirection.h"
struct Enemy
{
Enemy(SDL_Rect pos, int movementSpeed, MoveDirection dir)
{
m_pos = pos;
m_movementSpeed = movementSpeed;
m_dir = dir;
}
SDL_Rect m_pos; //Position of enemy
int m_movementSpeed = 0; //Movement speed of enemy
MoveDirection m_dir; //Movement direction of enemy
const int MIN_X_POS = 0;
const int MAX_X_POS = 750;
};
#pragma一次
#包括
#包括“MoveDirection.h”
结构敌人
{
敌方(垂直位置、内部移动速度、移动方向)
{
m_pos=pos;
m_movementSpeed=移动速度;
m_dir=dir;
}
SDL_Rect m_pos;//敌人的位置
int m_movementSpeed=0;//敌人的移动速度
移动方向m_dir;//敌人的移动方向
const int MIN_X_POS=0;
const int MAX_X_POS=750;
};
雷射
#pragma once
#include <SDL.h>
#include "MoveDirection.h"
struct Laser
{
Laser(SDL_Rect pos, int movementSpeed, MoveDirection dir)
{
m_pos = pos;
m_movementSpeed = movementSpeed;
m_dir = dir;
}
SDL_Rect m_pos; //Position of enemy
int m_movementSpeed = 0; //Movement speed of enemy
MoveDirection m_dir; //Movement direction of enemy
};
#pragma一次
#包括
#包括“MoveDirection.h”
结构激光器
{
激光器(SDL_Rect pos,int movementSpeed,MoveDirection dir)
{
m_pos=pos;
m_movementSpeed=移动速度;
m_dir=dir;
}
SDL_Rect m_pos;//敌人的位置
int m_movementSpeed=0;//敌人的移动速度
移动方向m_dir;//敌人的移动方向
};
你用开始你的循环(int敌人=0;敌人<敌人.size();敌人++)
但是在循环内部你调用敌人.erase(敌人.begin()+敌人)代码>这意味着循环索引现在无效。你开始时使用了一个大小为bize-friends.size()的向量,但是你通过在循环中调用erase来调整它的大小你开始循环时使用了for(int-friends=0;friends
但是在循环中你调用了friends.erase(friends.begin()+friends)代码>这意味着循环索引现在无效。您从一个大小为bize.size()的向量开始,但您通过在循环中调用erase来调整它的大小敌方类有两个常量成员,因此编译器无法为此类生成赋值运算符,并将其定义为deleted(因此会发生“deleted function”错误)。敌方类有两个常量成员,因此,编译器无法为此类生成赋值运算符,并将其定义为已删除(因此发生“已删除函数”错误)。错误发生在哪里?您试图调用什么函数?为更清楚起见,请编辑。请提供源代码行和错误全文message@Ryan您刚刚添加了更多代码…敌方类有两个常量成员,因此无法为该类生成赋值运算符(因此发生“删除函数”错误)。错误发生在哪里?您试图调用什么函数?为更清楚起见,请编辑。请提供源代码行和错误全文message@Ryan您刚刚添加了更多代码…敌方类有两个常量成员,因此无法为该类生成赋值运算符(因此出现“已删除函数”错误)是的,看起来还是老伙计。我看不见。这是我在代码中看到的全部。祝你好运。是的,看起来还是老伙计。我看不见。这是我在代码中看到的全部。祝你好运
#pragma once
#include <SDL.h>
#include "MoveDirection.h"
struct Laser
{
Laser(SDL_Rect pos, int movementSpeed, MoveDirection dir)
{
m_pos = pos;
m_movementSpeed = movementSpeed;
m_dir = dir;
}
SDL_Rect m_pos; //Position of enemy
int m_movementSpeed = 0; //Movement speed of enemy
MoveDirection m_dir; //Movement direction of enemy
};