以下のエラーですがなぜexplicit でもなくコピーコンストラクタを定義しているのも関わらずこのエラーが出るのですが?どうしても理解出来ません、
試したこと「基底クラスも調べましたがexplicit で宣言しているコピーコンストラクタはありません。これはどう対処したらいいでしょうか?」
「
エラー C2558 class 'Block': コピー コンストラクターが使用できないか、'explicit' として宣言されています。
」
hpp
1#ifndef ___BLOCK_HPP 2#define ___BLOCK_HPP 3 4 5#include "Object.hpp" 6#include "MapChip.hpp" 7#include <iostream> 8#include <array> 9 10 11class Entry; 12class Block : public Object 13{ 14public: 15 16 Block(Entry* e, ObjectType type, std::shared_ptr<TextureData> data, TextureUV uv, glm::ivec2 pos); 17 Block(Block& b); 18 ~Block(); 19 20 21 void Update(); 22 void Draw(); 23 24 25private: 26 27 std::array<MapChip,4> mChip; 28 29}; 30 31
cpp
1#include "../../Header/Game/Block.hpp" 2 3 4 5// コンストラクタ 6Block::Block(Entry *e,ObjectType type ,std::shared_ptr<TextureData> data,TextureUV uv,glm::ivec2 pos) : Object(e,type) 7{ 8 9 mChip.at(0) = MapChip(e, ObjectType::Block, data, uv, pos); 10 mChip.at(1) = MapChip(e, ObjectType::Block, data, uv, pos); 11 mChip.at(2) = MapChip(e, ObjectType::Block, data, uv, pos); 12 mChip.at(3) = MapChip(e, ObjectType::Block, data, uv, pos); 13 14} 15 16// コピーコンストラクタ 17Block::Block(Block& b) 18{ 19 mChip = b.mChip; 20 Type = b.Type; 21} 22 23void Block::Update() 24{ 25 26 27 28 for (std::array<MapChip, 4>::iterator itr = mChip.begin(); itr != mChip.end(); itr++) 29 { 30 itr->Update(); 31 } 32 33} 34 35 36void Block::Draw() 37{ 38 printf("aaa\n"); 39 for (std::array<MapChip, 4>::iterator itr = mChip.begin(); itr != mChip.end(); itr++) 40 { 41 itr->Draw(); 42 } 43 44} 45 46//コンストラクタ 47Block::~Block() 48{ 49 50} 51
hpp
1#ifndef OBJECT_HPP_ 2#define OBJECT_HPP_ 3 4#include "../Actor_2D.hpp" 5 6#define CELL ((int)48) 7 8//オブジェクトタイプ 9enum class ObjectType 10{ 11 Block, 12 destryBlock, 13 Ocean, 14 Woods, 15 Item, 16 17 Invalid, 18}; 19 20/*####################################### 21* オブジェクトクラス 22#########################################*/ 23class Entry; 24class Object : public Actor_2D 25{ 26public: 27 Object(Entry* e, ObjectType t); 28 Object(); 29 Object(Object& obj); 30 ~Object(); 31 32 ObjectType getObjectType(); 33 34 35 virtual void Update(); 36 virtual void Draw(); 37 38 39protected: 40 ObjectType Type; 41 42private: 43 44 45 46}; 47 48#endif 49
cpp
1#include "../../Header/Game/Object.hpp" 2 3// コンストラクタ 4Object::Object(Entry* e, ObjectType t) : Actor_2D() 5{ 6 Owner = e; //Entry クラス 7 Type = t; //オブジェクトタイプ 8} 9 10 11Object::Object() : Actor_2D() 12{ 13 Owner = nullptr; 14 Type = ObjectType::Invalid; 15} 16 17 18//オブジェクトタイプを取得 19ObjectType Object::getObjectType() 20{ 21 return Type; 22} 23 24Object::Object(Object& obj) 25{ 26 Type = obj.Type; 27} 28 29 30void Object::Update() 31{ 32 33} 34 35void Object::Draw() 36{ 37 38} 39 40 41 42 43//デストラクタ 44Object::~Object() 45{ 46} 47 48
hpp
1#ifndef ___ACTOR_HPP__ 2#define ___ACTOR_HPP__ 3 4#include "glm/glm.hpp" 5 6 7 8 9class Actor_2D 10{ 11public: 12 Actor_2D(); //コンストラクタ 13 ~Actor_2D(); //デストラクタ 14 15 virtual void Update() = 0; 16 virtual void Draw() = 0; 17 18 19 glm::ivec2 getPostion() 20 { 21 return mPosition; 22 } 23 24 void setPosition(glm::ivec2 pos) 25 { 26 mPosition = pos; 27 } 28 29protected: 30 31 glm::ivec2 mPosition; //座標 32 glm::ivec2 mScale; //スケール 33 float mRadian; //回転 34 35 glm::ivec2 mVector; //方向 36 37 class Entry* Owner; 38private: 39}; 40 41#endif
回答1件
あなたの回答
tips
プレビュー