タイトル通りですがなぜコンパイルエラー[ C2558 class 'MapChip': コピー コンストラクターが使用できないか、'explicit' として宣言されています。] ]
と表示されるのでしょうか? コピーコンストラクタは基底とそれを継承しているクラスに両方とも定義しているのですがコピーコンストラクタが使用できないという言葉の意味がわかりません。参考サイトを調べましたがどうすればいいのかいまいちわかりません。
cpp
1#include "MapChip.hpp" 2#include "Entry.hpp" 3//コンストラクタ 4MapChip::MapChip(Tag t, glm::vec2 pos, glm::vec2 colsize,int handle) : Actor(nullptr) 5{ 6 7 8 position = pos; //座標 9 worldPosition = pos; //ワールド座標 10 sprite = handle; //スプライト 11 //printf("%f\n",size.x); 12 13 14 15 //当たり判定 16 size.x = CELL; 17 size.y = CELL; 18 19 20// mCol = std::make_shared<BoxCollision>(); 21// mCol = std::make_shared<BoxCollision>(); 22 23 minValue = position; 24 maxValue = position + size; 25 26 27 mCol.setTag(t); //タグ 28 mCol.setMin(minValue); //最小値 29 mCol.setMax(maxValue); //最大値 30 31 32/* 33 mCol->setTag(t); //タグ 34 mCol->setMin(&minValue); //最小値 35 mCol->setMax(&maxValue); //最大値 36 */ 37 //printf("ああああ %f %f\n", mCol->getMax().x, mCol->getMax().y); 38// printf("ああああ %f %f\n", mCol->getMin().x, mCol->getMin().y); 39 40} 41 42//ワールド座標を取得 43glm::vec2 MapChip::getWorldPosition() 44{ 45 return worldPosition; 46} 47 48 49 50 51 52 53//デフォルトコンストラクタ 54MapChip::MapChip() : Actor(nullptr) 55{ 56 57} 58 59void MapChip::Update() 60{ 61 minValue = position; 62 maxValue = position + size; 63 mCol.setMin(minValue); //最小値 64 mCol.setMax(maxValue); //最大値 65 66 67} 68 69void MapChip::Draw() 70{ 71 DrawGraph((int)position.x, (int)position.y,sprite,true); 72 DrawCircle(maxValue.x, maxValue.y, 5, GetColor(0, 255, 0), true); 73 DrawCircle(minValue.x, minValue.y ,5, GetColor(255, 0, 0), true); 74 75} 76 77//コピーコンストラクタ 78MapChip::MapChip(MapChip& m) 79{ 80 this->mCol = m.mCol; 81} 82 83//デストラクタ 84MapChip::~MapChip() 85{ 86 87} 88
cpp
1#ifndef ___MAPCHIP_HPP_ 2#define ___MAPCHIP_HPP_ 3 4#include "glm/glm.hpp" 5#include <dxlib.h> 6#include <iostream> 7 8#include "Actor.hpp" 9#include "Collision.hpp" 10 11/*#################################################### 12* マップチップクラス 13* 14* 説明 15* ステージのマップチップの情報 16######################################################*/ 17 18class MapChip : public Actor 19{ 20public: 21 MapChip(Tag t, glm::vec2 pos, glm::vec2 colsize, int handle); //コンストラクタ 22 MapChip(); //デフォルト コンストラクタ 23 MapChip(MapChip& m); //コピー コンストラクタ 24 25 ~MapChip(); //デストラクタ 26 27 28 glm::vec2 getWorldPosition(); //ワールド座標を取得 29 void Update(); //計算 30 void Draw(); //描画 31 32 33 void setSize(glm::vec2 size); //サイズを設定 34 void setHandle(int handle); //ハンドルを設定 35 36 37 38 //std::shared_ptr<BoxCollision> mCol; 39 BoxCollision mCol; 40private: 41 42 int sprite; //スプライト 43 glm::vec2 worldPosition; //ワールド座標 44 45 glm::vec2 minValue; // 46 glm::vec2 maxValue; // 47 48 49 50}; 51 52 53#endif 54
cpp
1#include "Actor.hpp" 2 3//コンストラクタ 4Actor::Actor(Entry* e,glm::vec2 pos ,glm::vec2 vec ) 5{ 6 vector = vec; 7 position = pos; 8 size = glm::vec2(0,0); 9 owner = e; 10} 11 12//デフォルト コンストラクタ 13Actor::Actor() 14{ 15 16} 17 18 19//コピー コンストラクタ 20Actor::Actor(Actor &a) 21{ 22 vector = a.vector; 23 position = a.position; 24 size = a.size; 25} 26 27 28//方向を取得 29glm::vec2 Actor::getVector() 30{ 31 return vector; 32} 33 34//座標を取得 35glm::vec2 Actor::getPosition() 36{ 37 return position; 38} 39 40//座標を取得 41void Actor::setPosition(glm::vec2 pos) 42{ 43 position = pos; 44} 45 46 47 48 49//デストラクタ 50Actor::~Actor() 51{ 52 53} 54
cpp
1#ifndef ___ACTOR_HPP_ 2#define ___ACTOR_HPP_ 3 4#include "glm/glm.hpp" 5#include "dxlib.h" 6 7//#include "Entry.hpp" 8class Entry; 9/*#################################################### 10* アクター 11* 12* 説明 13* 全てのゲームオブジェクトはこれを継承する。 14######################################################*/ 15 16class Actor 17{ 18public: 19 Actor(Entry* e, glm::vec2 pos = glm::vec2(0, 0), glm::vec2 vec = glm::vec2(0, 0)); //コンストラクタ 20 Actor(); //デフォルトコンストラクタ 21 ~Actor(); //デストラクタ 22 Actor(Actor& a); //コピー コンストラクタ 23 24 void virtual Update() = 0; //計算 25 void virtual Draw() = 0; //描画 26 27 //取得 関係 28 glm::vec2 getVector(); //方向 29 glm::vec2 getPosition(); //座標 30 31 //設定 関係 32 void setPosition(glm::vec2 pos); 33 34protected: 35 36 glm::vec2 position; //座標 37 glm::vec2 vector; //方向 38 glm::vec2 size; //スプライトのサイズ 39 40 Entry* owner; //Entry クラス 41 42}; 43 44 45#endif 46
回答1件
あなたの回答
tips
プレビュー