ページ 11

インスタンスが引用リストと一致しません

Posted: 2018年4月03日(火) 12:18
by uset2
初心者です
http://nut-softwaredevelopper.hatenablo ... /18/124313
上記でc++をやっているのですが
「コンストラクター "Map::Map" のインスタンスが引数リストと一致しません」とエラーがでてしまいます
まったくわからないためわかる方いたら教えていただきたいです

コード:

#pragma once

#include<DxLib.h>
#include"Map.h"
#include"Player.h"

class Control{
public:
	Player * pl;
	Map*map[3];

	Control() {
		pl = new Player();
		map[0] = new Map("flame1.csv");//エラー発生
		map[1] = new Map("flame2.csv");//同様
		map[2] = new Map("flame3.csv");//同様
		pl->x = pl->targetX = CELL_WIDTH;
		pl->y = pl->targetY = CELL_HEIGHT;
	}


	~Control() {
		delete pl;
		for (int i = 0;i < 3;i++) {
			delete map[i];
		}
	}

	void All() {
		for (int i = 0;i < 3;i++)map[i]->BackView;
		pl->All(map);
		for (int i = 0;i < 3;i++)map[i]->FrontView;
	}
};

Re: インスタンスが引用リストと一致しません

Posted: 2018年4月04日(水) 12:42
by かずま
uset2 さんが書きました:
7年前
「コンストラクター "Map::Map" のインスタンスが引数リストと一致しません」とエラーがでてしまいます
VC++ でも、g++ でもそのようなエラーメッセージは出ないんですが、
コンパイラは何ですか?

"flame1.csv" の型が char[11] で、それは const char * に型変換されます。
しかし、const char * から char * への暗黙の型変換は C++ の規格上
行われません。ただ、VC++ ではエラーにならないようです。

コード:

		map[0] = new Map("flame1.csv"); を
		map[0] = new Map(const_cast<char *>("flame1.csv")); または
		map[0] = new Map((char *)"flame1.csv"); に変更してみてください。
あるいは、Map.h の中の
    Map(char* add){ を
    Map(const char* add){ に変更してみてください。
結果はどうなりますか?

Re: インスタンスが引用リストと一致しません

Posted: 2018年4月04日(水) 15:21
by かずま
かずま さんが書きました:
7年前
["flame1.csv" の型が char[11] で、それは const char * に型変換されます。
"flame1.csv" の型は、const char[11] ですね。
そして、const char * に暗黙の型変換される。

エラーをなくすには、次のようにしてもよいかも。

コード:

        static char f1[] = "flame1.csv";
        map[0] = new Map(f1);

Re: インスタンスが引用リストと一致しません

Posted: 2018年4月04日(水) 19:52
by uset2
返信遅れてしまい申し訳ありません
アドバイス通り実行したらエラーを無くすことができました
教えてくださりありがとうございました

Re: インスタンスが引用リストと一致しません

Posted: 2018年4月04日(水) 20:13
by かずま
4つの修正方法を示しましたが、どれを採用しましたか?

また、何というコンパイラかを使っているのですか?

Re: インスタンスが引用リストと一致しません

Posted: 2018年4月05日(木) 20:25
by uset2
一番上の
map[0] = new Map(const_cast<char *>("flame1.csv"));
を採用したところエラーを無くすことができました
(実際は違いがわからないためです)

visual studio 2017を使用しています