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 (©Tile != 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。如果有人认为这个问题应该被删除,因为它具有误导性,请告诉我。
我有一个关于在实例化对象期间创建对象的二维向量的问题。
背景: 我有一个名为 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 (©Tile != 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。如果有人认为这个问题应该被删除,因为它具有误导性,请告诉我。