質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

2025閲覧

エラー[ C2558 class 'MapChip': コピー コンストラクターが使用できないか、'explicit' として宣言されています。]の解決方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2021/03/23 05:01

編集2021/03/23 05:07

タイトル通りですがなぜコンパイルエラー[ C2558 class 'MapChip': コピー コンストラクターが使用できないか、'explicit' として宣言されています。] ]

と表示されるのでしょうか? コピーコンストラクタは基底とそれを継承しているクラスに両方とも定義しているのですがコピーコンストラクタが使用できないという言葉の意味がわかりません。参考サイトを調べましたがどうすればいいのかいまいちわかりません。

参考サイト: https://docs.microsoft.com/ja-jp/cpp/error-messages/compiler-errors-2/compiler-error-c2558?view=msvc-160

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2021/03/23 05:05

コピーコンストラクタの宣言も開示してください。
退会済みユーザー

退会済みユーザー

2021/03/23 05:07

提示コードを修正しました。
guest

回答1

0

ベストアンサー

https://teratail.com/questions/320597

こちらの質問が参考になると思います。

投稿2021/03/23 05:08

int32_t

総合スコア21695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問