static変数の外部シンボル未解決のエラーについて

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

static変数の外部シンボル未解決のエラーについて

#1

投稿記事 by murasame » 10年前

クラスのメンバ変数にstatic変数を使おうとするとどうしてもこのエラーが取れません・・・。
static変数は宣言の他に定義を示さなければならないのでcppの上で初期化しています。
他のstaticメンバはうまくいったようですが**m_collisionMapだけがエラーを吐き続けるます・・・。
初期化の方法が悪いのでしょうか・・・?

コード:

エラー	1	error LNK2001: 外部シンボル ""private: static int * * CMap::m_collisionMap" (?m_collisionMap@CMap@@0PAPAHA)" は未解決です。

コード:

#ifndef DEF_CMAP_H
#define DEF_CMAP_H

enum collisionPosition
{
	COLLISION_BOTTOM,
	COLLOSION_TOP,
	COLLOSION_RIGHT,
	COLLOSION_LEFT
};

class CMap
{
private:
	static int m_height;
	static int m_width;
	static int **m_collisionMap;
public:

	static int initCollMap();
	static bool CMap::collsionCheckMap(int, int, collisionPosition, int,int);

};

#endif

コード:

#include"CMap.h"
#include<stdio.h>

int CMap::m_height = 0;
int CMap::m_width = 0;
int CMap::**m_collisionMap = NULL;

int CMap::initCollMap()
{	

	FILE *fp;
	if (int error = fopen_s(&fp, "Resource/collisionMapSize.txt", "r") != 0){ // ファイルを開く
		printf("ファイルが開けない。");
		return 0;
	}
	int data;
	for (int i = 0; i<2 ;i++){
		fscanf_s(fp, "%d", &data);
		if (i == 0)
			CMap::m_height = data;
		else
			CMap::m_width = data;
	}
	fclose(fp);
	CMap::m_collisionMap = new int*[CMap::m_height];
	for (int i = 0; i < CMap::m_height; i++)
	{
		CMap::m_collisionMap[i] = new int[CMap::m_width];
	}
	if (int error = fopen_s(&fp, "Resource/collisionMap.txt", "r") != 0){ // ファイルを開く
		printf("ファイルが開けない。");
		return 0;
	}
	for (int i = 0; i<m_height; i++){
		for (int j = 0; j < CMap::m_width; j++){
			fscanf_s(fp, "%d", &data);
			CMap::m_collisionMap[i][j] = data;
		}
	}
	fclose(fp);

	for (int i = 0; i<m_height; i++){
		for (int j = 0; j < CMap::m_width; j++){
			printf(" %d", CMap::m_collisionMap[i][j]);
		}
		printf("\n");
	}
	return 0;
}

bool CMap::collsionCheckMap(int m_posX, int m_posY, collisionPosition point, int CHARA_HEIGHT,int CHARA_WIDHT)
{
	switch (point)         //途中
	{
	case COLLISION_BOTTOM:
		if (CMap::m_collisionMap[(m_posY + CHARA_HEIGHT) / 32][m_posX / 32 ] == 1){
			return true;
		}
		break;
	default:
		return false;
		break;
	}
	return false;
}

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: static変数の外部シンボル未解決のエラーについて

#2

投稿記事 by h2so5 » 10年前

これはstatic変数の定義ではなく単なるグローバル変数です。

コード:

int CMap::**m_collisionMap = NULL;
static変数の定義はこのように書きます。

コード:

int **CMap::m_collisionMap = NULL;

murasame
記事: 4
登録日時: 10年前

Re: static変数の外部シンボル未解決のエラーについて

#3

投稿記事 by murasame » 10年前

h2so5さん
コンパイル通りました!本当にありがとうございます!

閉鎖

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