次のコードを見てください。
GameComponent.h
#pragma once
#include<time.h>
#include "Position.h"
class GameComponent
{
public:
GameComponent(int);
GameComponent();
~GameComponent(void);
virtual void update(const tm*);
void addPosition(Position *p);
friend class Position;
private:
int id;
Position *position;
};
GameComponent.cpp
#include "GameComponent.h"
#include <iostream>
#include <time.h>
#include "DrawableGameComponent.h"
#include "Position.h"
using namespace std;
GameComponent::GameComponent(int v):id(v)
{
}
GameComponent::GameComponent(){}
GameComponent::~GameComponent(void)
{
}
void GameComponent::update(const tm* time)
{
cout << "ID : " << id << endl;
cout << "Update: " << time->tm_hour << ":" << time->tm_min << ":" << time->tm_sec << endl;
position->display();
//Position::displayPositions();
}
void GameComponent::addPosition(Position *p)
{
position = p;
p->display();
cout << "position working" << endl;
}
位置.h
#pragma once
class Position
{
friend class GameComponent;
public:
Position(int x, int y, int z);
Position();
~Position();
void display();
private:
int x;
int y;
int z;
};
ポジション.cpp
#include "Position.h"
#include <iostream>
using namespace std;
Position::Position(int x, int y, int z)
{
this->x = x;
this->y = y;
this->z = z;
}
Position::Position(){}
Position::~Position(void)
{
}
void Position::display()
{
//cout << "Display Working" << endl;
cout <<"Position " << " X: " << x << " Y: " << y << " Z: " << z << endl;
}
まず、これは完全なコードではなく、エラーが発生したコードの一部です。コードを実行すると、エラーが発生します
Unhandled exception at 0x00302d90 in GameEngine.exe: 0xC0000005: Access violation reading location 0xcdcdcdd5.
display()
メソッドの出力領域 (cout << "X" << ........) をposition
指しています (Visual Studio では、その場所を指す黄色の配列が表示されます)。
この問題をグーグルで調べたところ、どこにも指していないヌルポインターが原因で発生することがわかりました。GameComponent
のaddPosition()
メソッド内にポインタ代入(別のポインタへのポインタパラメータの代入)があります。
エラーはそこから来ていると思います。このエラーを取り除くのを手伝ってください
アップデート
以下は、 addPosition() ができない場所です
テスト.cpp
GameComponent **コンポーネント;
void Test::add(GameComponent *gameComponent, Position *p)
{
component[componentCount] = gameComponent;
component[componentCount]->addPosition(p);
componentCount++;
}