C2280:"attempting to reference deleted function" 对于复制构造函数,CC248“'operator ='cannot access private member declared in class”(Cocos2dx)

C2280: "attempting to reference deleted function" for copy constructor, CC248 "'operator ='cannot access private member declared in class" (Cocos2dx)

我有一个关于在实例化对象期间创建对象的二维向量的问题。

背景: 我有一个名为 Dungeon 的 class,它需要 Tile 对象的二维向量。 (矢量,因为我可以调整大小,因为在实例化之前我不知道矢量的尺寸。)

错误:

Error   C2280   'Tile &Tile::operator =(const Tile &)': attempting to reference a deleted function  MyCppGame   c:\users\dante\git\yshacpp\mycppgame\classes\tile.cpp   18  

更新:现在我收到了 Error C2248 'cocos2d::Sprite::operator =': cannot access private member declared in class 'cocos2d::Sprite' -- 会不会是雪碧 operator= 的 cocos2D-X 问题?将 Sprite 声明放在 public 中没有帮助,但我怀疑 cocos2D-X...

我的怀疑(已修改): cocos2d::Sprite* floor, item, overlay, ceiling; inside my Tile class 似乎导致抛出此错误。

我尝试过的方法: 为 Tile 编写我自己的复制构造函数。


也许我的怀疑是错误的,但如果有人能告诉我为什么会这样,我将不胜感激!


class 的 CPP 文件(平铺)

#include "Tile.h"

Tile::Tile()  : block(false), hasCharacter(false) { /* Nothing */ }

class Tile

的头文件
#ifndef __TILE_H__
#define __TILE_H__

#include ...

class Tile {
protected:
    bool deepCopy(const Tile& copyTile) {
        bool result = false;
        if (&copyTile != this) {
            this->character = copyTile.character;
            this->floor = copyTile.floor;
            this->item = copyTile.item;
            this->overlay = copyTile.overlay;
            this->ceiling = copyTile.ceiling;
            result = true;
        }
        return result;
    }

    cocos2d::Sprite* floor, item, overlay, ceiling;

// private: // nothing atm
public:
    bool block, hasCharacter;
    Character character;

    Tile();
    Tile(const Tile& copyTile) { deepCopy(copyTile); };
    Tile& operator=(const Tile& copyTile) { deepCopy(copyTile); return *this; }
    //~Tile();
};

#endif // __TILE_H__

这一次我注意到 cocos2d 类 在 Visual Studio(社区 2015)中有问题,所以我确认 import "cocos2d.h" 没有工作。原来是这个问题。


回顾一下,我做了以下更改:

1) 确保我的 IDE 正确包含头文件(Visual Studio Community 2015)

2) 已编辑 Tile.h

class Tile { ...
private:
    cocos2d::Sprite* floor;
    cocos2d::Sprite* item;
    cocos2d::Sprite* overlay;
    cocos2d::Sprite* ceiling
...
}

3) 重写了我的深拷贝

然后成功了。

这是一个奇怪的情况,但为了它的价值,我删除了我的 Deep Copy 以查看会发生什么,并且没有它它也能工作。如果拥有它是最好的做法,我会把它留在那里....

感谢所有花时间发表评论的人,因为它帮助澄清了我犯的很多错误。


P.S。如果有人认为这个问题应该被删除,因为它具有误导性,请告诉我。