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;
}