🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

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

Q&A

解決済

2回答

2009閲覧

エラー 「"std::array<MapChip, 4Ui64>" の既定のコンストラクターを参照できません」 のエラーの解決方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

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

0グッド

0クリップ

投稿2021/02/04 10:47

編集2021/02/04 11:42

提示コードですが提示画像のエラーが複数出るのですがどうすればいいのでしょうか? コピーコンストラクタや代入コンストラクタを用意しましたがエラーが抜けません。どうすればいいのでしょうか?

イメージ説明

hpp

1#ifndef ___BLOCK_HPP 2#define ___BLOCK_HPP 3 4#include "Object.hpp" 5#include "MapChip.hpp" 6#include <iostream> 7#include <array> 8 9 10class Entry; 11class Block : public Object 12{ 13public: 14 15 Block(Entry* e, ObjectType type, std::shared_ptr<TextureData> data, TextureUV uv, glm::ivec2 pos); 16 ~Block(); 17 Block(); 18 19 explicit Block(Block& b); 20 Block& operator = (const Block& b); 21 22 23 24 void Update(); 25 void Draw(); 26 27 28private: 29 30 std::array<MapChip,4> mChip; 31 32}; 33 34 35#endif 36

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 16Block::Block() : Object() 17{ 18 19} 20 21 22Block::Block(Block& b) 23{ 24 mChip = b.mChip; 25} 26 27 28Block& Block::operator = (const Block& b) 29{ 30 mChip = b.mChip; 31} 32 33void Block::Update() 34{ 35 /* 36 for (std::array<Mapchip>::iterator itr = mChip.begin(); itr != mChip.end(); itr++) 37 { 38 39 } 40 */ 41} 42 43void Block::Draw() 44{ 45 46} 47 48//コンストラクタ 49Block::~Block() 50{ 51 52} 53
#ifndef ___MAPCHIP_HPP_ #define ___MAPCHIP_HPP_ #include "../LoadTexture.hpp" #include "../Collision.hpp" #include "../Sprite.hpp" #include "Object.hpp" #include <iostream> #include "glm/glm.hpp" /*####################################################################### * NOTE * マップチップ一枚の情報 * #########################################################################*/ class Entry; class MapChip : public Object { public: /* * Entry クラス * オブジェクトタイプ * 画像データ * UV座標 * 座標 */ MapChip(Entry* e, ObjectType type, std::shared_ptr<TextureData> data, TextureUV uv, glm::ivec2 pos); ~MapChip(); void Update(); void Draw(); private: Box_Collision_2D Collision; std::shared_ptr<Sprite> mSprite; TextureUV UV; }; #endif

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

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

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

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

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

maisumakun

2021/02/04 11:40

MapChipの定義はどのようなものでしょうか?
退会済みユーザー

退会済みユーザー

2021/02/04 11:42

文章を編集しました。
guest

回答2

0

ベストアンサー

MapChipにデフォルトコンストラクタがありません。

投稿2021/02/04 11:42

maisumakun

総合スコア145971

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

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

退会済みユーザー

退会済みユーザー

2021/02/04 11:46

MapChip::MapChip() : Object(nullptr, ObjectType::Invalid) { } このようにデフォルトコンストラクタを定義しました。
guest

0

提示されているソースが足りないので間違ってるかもしれませんが、これでどうでしょうか。

c++

1Block::Block(Entry* e, ObjectType type, std::shared_ptr<TextureData> data, TextureUV uv, glm::ivec2 pos) : Object(e, type), 2 mChip{ 3 MapChip(e, ObjectType::Block, data, uv, pos), 4 MapChip(e, ObjectType::Block, data, uv, pos), 5 MapChip(e, ObjectType::Block, data, uv, pos), 6 MapChip(e, ObjectType::Block, data, uv, pos) 7 } 8{ 9}

MapChipにデフォルトコンストラクタがないのに、
中身を指定せずに配列を作ろうとして怒られているように見えます。

投稿2021/02/04 11:45

actorbug

総合スコア2429

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問