相等的运算符尝试引用已删除的函数数组

我正在使用SFML创建使用C ++进行的太空入侵者克隆。我是C ++的新手,在从事此项目时正在学习它。

尝试使用构造函数和数组为每个创建的敌人设置设置来创建新敌人时,出现以下错误:

1>enemy.cpp
1>C:\Users\dzamm\source\repos\SFML\enemy.cpp(35,1): error C2280: 'Enemy &Enemy::operator =(const Enemy &)': attempting to reference a deleted function
1>C:\Users\dzamm\source\repos\SFML\enemy.h(55): message : compiler has generated 'Enemy::operator =' here
1>C:\Users\dzamm\source\repos\SFML\enemy.h(55,1): message : 'Enemy &Enemy::operator =(const Enemy &)': function was implicitly deleted because a data member invokes a deleted or inaccessible function 'sf::RenderWindow &sf::RenderWindow::operator =(const sf::RenderWindow &)'

敌对构造函数:

Enemy alienArray[NUMber_OF_ALIENS];

//constructor sets ID number,loads sprite
Enemy::Enemy(const int id,float sp)
{
    //set alive
    mIsAlive = true;

    //set speed
    enemySpeed = sp;

    // Load an enemy texture
    if (!mEnemyTexture.loadFromFile("Media/Textures/PixelSpaceships/red_01.png")) {
        // Handle loading error
        std::cout << "Oh No! File not loaded." << std::endl;
    }

    //scale sprite and set texture so we know size
    enemySprite.setTexture(mEnemyTexture);
}

敌方加载器方法

void Enemy::loader(int noOfAliens) { // might add xPosition;yPosition

    for (int i = 0; i < noOfAliens; i++)
    {
        Enemy alien(i,10.f); // speed issue
        alien.setLocation(i * 100.f + 50.f,alien.getSprite().getGlobalBounds().height / 2);
line 35     alienArray[i] = alien;
        //alienArray.push_back(alien);
    }
}

1>C:\Users\dzamm\source\repos\SFML\enemy.cpp(35,1): error C2280: 'Enemy &Enemy::operator =(const Enemy &)': attempting to reference a deleted function

敌人头文件:

#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
#pragma once

#define NUMber_OF_ALIENS 4

//class Game;
class Enemy
{
public:
    //constructor sets ID number,loads sprite
    Enemy() {};
    Enemy(const int,float);
    sf::Sprite&             getSprite();
    void                    kill();
    bool                    isAlive();
    void                    load();
    void                    loader(const int noOfAliens);
    void                    setLocation(float xPosition,float yPosition);
    void                    enemyInstantiator(int noOfEnemies,float xPosition,float yPosition);
    void                    update();
    void                    render(sf::RenderWindow& window);

private:

    void                    enemyBehaviour(std::vector<sf::Sprite>& enemyList);
    void                    enemyMovement(std::vector<Enemy>& enemyList);

private:


    sf::Texture             mEnemyTexture;
    sf::Sprite              enemySprite;


    //std::vector<Enemy>        alienArray;
    //std::vector<sf::Sprite> mEnemies;
    sf::RectangleShape      mEnemyBounds;

    sf::RenderWindow        mWindow;


    bool                    mIsShooting;
    bool                    mIsAlive;
    float                   enemySpeed;
};

我在论坛上阅读了与该对象的副本而不是原始对象有关的问题,但是我不确定如何处理该引用以引用我正在修改的原始对象。

要重现为Enemy.cpp类创建构造函数,请使用Enemy :: loader中所示的for循环方法在Enemy:c中创建一个实体Enemy外星人,并将创建的实体存储在Enemy AlienArray中,如索引所示。

gr364212028 回答:相等的运算符尝试引用已删除的函数数组

问题与代码中甚至没有使用的sf :: RenderWindow引用有关。

sf::RenderWindow &sf::RenderWindow::operator =(const sf::RenderWindow &)

删除此错误后,所有错误都会消失。

本文链接:https://www.f2er.com/3061166.html

大家都在问