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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
uset2
記事: 3
登録日時: 6年前

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

#1

投稿記事 by uset2 » 6年前

初心者です
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: インスタンスが引用リストと一致しません

#2

投稿記事 by かずま » 6年前

uset2 さんが書きました:
6年前
「コンストラクター "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: インスタンスが引用リストと一致しません

#3

投稿記事 by かずま » 6年前

かずま さんが書きました:
6年前
["flame1.csv" の型が char[11] で、それは const char * に型変換されます。
"flame1.csv" の型は、const char[11] ですね。
そして、const char * に暗黙の型変換される。

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

コード:

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

uset2
記事: 3
登録日時: 6年前

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

#4

投稿記事 by uset2 » 6年前

返信遅れてしまい申し訳ありません
アドバイス通り実行したらエラーを無くすことができました
教えてくださりありがとうございました

かずま

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

#5

投稿記事 by かずま » 6年前

4つの修正方法を示しましたが、どれを採用しましたか?

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

uset2
記事: 3
登録日時: 6年前

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

#6

投稿記事 by uset2 » 6年前

一番上の
map[0] = new Map(const_cast<char *>("flame1.csv"));
を採用したところエラーを無くすことができました
(実際は違いがわからないためです)

visual studio 2017を使用しています

返信

“C言語何でも質問掲示板” へ戻る