2016-09-26 10 views
0

У меня возник вопрос о создании 2D-вектора объектов во время создания объекта.C2280: «попытка ссылки на удаленную функцию» для конструктора копирования, CC248 «'operator =' не может получить доступ к закрытому члену, объявленному в классе» (Cocos2dx)

Background: У меня есть класс под названием Dungeon, которому нужен 2D-вектор объектов Tile. (Vector, так как я могу изменить размер, так как пока конкретизации я не знаю размеры вектора.)

Ошибка:

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

UPDATE: Теперь я получаю Error C2248 'cocos2d::Sprite::operator =': cannot access private member declared in class 'cocos2d::Sprite' - Может быть Вопрос о cocos2D-X с Sprite operator=? Ввод деклараций Sprite в public не помогло, но я заподозрив что-то с cocos2d-X ....

Мои подозрения (в новой редакции):cocos2d::Sprite* floor, item, overlay, ceiling; внутри моего Tile класса, кажется, вызывает эту ошибку выбросить.

Что я пытался: Написал собственный экземпляр-конструктор для плитки.


Может быть, мои подозрения ошибочны, но если кто-то может позволить мне знать, почему это происходит, я буду благодарен!


CPP файл класс (плитка)

#include "Tile.h" 

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

Header файл класс 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__ 
+0

У вас не может быть вектор несъемных несдвижных объектов, поскольку вектор должен копировать объекты (или перемещать их). – immibis

+0

'operator =' является оператором присваивания, а не конструктором копирования –

+0

, вероятно, 'Символ' не копируется, поэтому оператор неявного присваивания' Tile' удален –

ответ

0

На этот раз я заметил, что cocos2d классы действуют в Визуальном Studio (Community 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. Если кто-то считает, что этот вопрос нужно удалить, поскольку он вводит в заблуждение, пожалуйста, дайте мне знать.