続・C2512エラーが出た。

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

続・C2512エラーが出た。

#1

投稿記事 by keito94 » 8年前

連続での質問すいません。頑張ってエラー駆除をしていたところ、player.cppの5行目に「C2512 'CCharMove': クラス、構造体、共用体に既定のコンストラクターがありません。」というエラーが出て、main.cppの8行目に「C2512 'CPlayer': クラス、構造体、共用体に既定のコンストラクターがありません。」というエラーが出ました。どうすればいいのでしょうか?
Main.cpp

コード:

#include "Main.h"
#include "Player.h"
#include "fmfmap.h"

CFmfMap MapObj;
CPlayer *Player;
CGameMain Main;

int CGameMain::MapLoad(const char* file_name, int stage_num) {
	MapBitCount = MapObj.GetLayerBitCount() == 8 ? 16 : 256;
	if (!MapObj.Open(file_name)) {
		return -1;
	}
	BYTE* layer = (BYTE*)MapObj.GetLayerCount();
	if (layer == NULL) {
		return -1;
	}
	return 0;
}

int CGameMain::Init() {
	ChangeWindowMode(TRUE), SetGraphMode(320, 240, 32);
	//DXライブラリの初期化エラーが発生したときに終了。
	if (DxLib_Init() == -1) { return -1; }
	Time = GetNowCount();
	SetDrawScreen(DX_SCREEN_BACK);
	SetWaitVSyncFlag(FALSE);
	Player->Init();
	return 0;
}

void CGameMain::Main() {
	Time = GetNowCount();
	//1/60秒立つまで待つ
	while(GetNowCount()-Time<1000/60){}
	Player->Update();
	Player->Draw();
}

void CGameMain::Fin() {
	Player->Fin();
	DxLib_End();
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	Main.Init();
	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
		Main.Main();
	}
	Main.Fin();
	return 0;
}
Main.h

コード:

#pragma once
#include "DxLib.h"
class CTaskList;
class CGameMain {
	int Time;
public:
	int MapLoad(const char* file_name, int stage_num);
	int Init();
	void Main();
	void Fin();
};
extern int MapBitCount;
Mover.cpp

コード:

#include "Dxlib.h"
#include "CharMove.h"
#include "Mover.h"
CMover::CMover(float x, float y, float l, float t, float r, float b)
	:X(x), Y(y), L(l), T(t), R(r), B(b) {
}

bool CMover::Hit(CMover* m) {
	return
		X + L < m->X + m->R && m->X + m->L < X + R &&
		Y + T < m->Y + m->B && m->Y + m->T < Y + B;
}
Move.h

コード:

#pragma once
class CMover {
public:
	float X, Y, L, R, T, B;
	float VX, VY;

	CMover(float x, float y, float l, float t, float r, float b);
	bool Hit(CMover* m);
};
CharMove.cpp

コード:

#include "DxLib.h"
#include "Main.h"
#include "CharMove.h"
#include "fmfmap.h"
CFmfMap MapObj;
CCharMove::CCharMove(POINT pt[], float clx, float crx, float cty, float cby, int coltype)
	: Clx(clx), Crx(crx), Cty(cty), Cby(cby),ColType(coltype)
{
	Init();
	for (int i = 0; i < 8; i++) {
		mPt[i].x = pt[i].x;
		mPt[i].y = pt[i].y;
	}
}

void CCharMove::Init() {
	ZeroMemory(mPt, sizeof(mPt));
}

POINT CCharMove::CheckMap(int x, int y) {
	POINT pt[] = {
		{ x + mPt[0].x,	y + mPt[0].y },//左上
		{ x + mPt[1].x,	y + mPt[1].y },//上真ん中
		{ x + mPt[2].x,	y + mPt[2].y },//右上

		{ x + mPt[3].x,	y + mPt[3].y },//左真ん中
		{ x + mPt[4].x,	y + mPt[4].y },//右真ん中

		{ x + mPt[5].x,	y + mPt[5].y },//左下
		{ x + mPt[6].x,	y + mPt[6].y },//下真ん中
		{ x + mPt[7].x,	y + mPt[7].y },//右下
	};
	POINT res = { x, y };
	DWORD cwidth = MapObj.GetChipWidth();
	DWORD cheight = MapObj.GetChipHeight();

	for (int i = 0; i < 8; i++) {
		int index = MapObj.GetValue(1, pt[i].x / MapCell, pt[i].y / MapCell);
		int src_x = (index % MapBitCount) * cwidth;
		int src_y = (index / MapBitCount) * cheight;
		if (src_x == 0 && src_y == 0) // 取得したindexが壁だったら
		{
			res.x = pt[i].x / MapCell; // 壁の座標を代入
			res.y = pt[i].y / MapCell;
			return res; // 壁の座標を返す
		}
	}
	res.x = -1;
	res.y = -1;
	return res;
}

void CCharMove::MapDraw() {
	DWORD swidth = MapObj.GetMapWidth();
	DWORD sheight = MapObj.GetMapHeight();
	DWORD cwidth = MapObj.GetChipWidth();
	DWORD cheight = MapObj.GetChipHeight();
	DWORD i, j;
	int index, src_x, src_y;
	for (i = 0; i < sheight / MapCell; i++) {
		for (j = 0; j = swidth / MapCell; i++) {
			index = MapObj.GetValue(0, i, j);
			src_x = (index % MapBitCount) * cwidth;
			src_y = (index / MapBitCount) * cheight;
		}
	}
}
CharMove.h

コード:

#pragma once
//マップチップ
const int MapCell = 16;
class CCharMove {
	float Clx, Crx, Cty, Cby;
	POINT mPt[8];
	int ColType;
public:
	CCharMove(POINT pt[], float clx, float crx, float cty, float cby,int coltype);
	void Init();
	POINT CheckMap(int x, int y);
	void MapDraw();
};
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
keito94
記事: 264
登録日時: 8年前
連絡を取る:

Re: 続・C2512エラーが出た。

#2

投稿記事 by keito94 » 8年前

ヘッダーファイル内で宣言をしたら、自己解決しました。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

返信

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