为啥当从派生类访问基类的数据时它会返回废话(我认为是指针数据)
Posted
技术标签:
【中文标题】为啥当从派生类访问基类的数据时它会返回废话(我认为是指针数据)【英文标题】:why when accessing data from the base class from a derived class does it return nonsense (pointer data i think)为什么当从派生类访问基类的数据时它会返回废话(我认为是指针数据) 【发布时间】:2015-11-07 15:42:22 【问题描述】:我正在使用坐标为基于文本的游戏制作碰撞检测系统。我正在尝试检索我的玩家和一系列怪物的 x 和 y 位置。坐标保存在低音类字符中。当我尝试检索它返回 Xpos -858993460 的数据时,我假设它来自我正在使用的指针。
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
const int MON_SIZE = 10;
monster* monArr[MON_SIZE];
player player1;
bool collision();
int main()
void initialise();
player1.moveChar(3, 6);
bool temp;
temp = collision();
if (temp = true)
cout << endl << "collision detected" << endl;
system("pause");
return 0;
void initialise()
srand(time(NULL));
for (int i = 0; i < 10; i++)
int inx = rand() % 9;
int iny = rand() % 9;
monArr[i] = new monster();
monArr[i]->moveChar(inx, iny);
bool collision()
bool collision;
for (int i = 0; i < 10; i++)
int mx, my, px, py;
monArr[i]->getPos(mx, my);
player1.getPos(px, py);
if (mx == px && my == py)
collision = true;
cout << endl << mx << " " << my << endl;
else collision = false;
return collision;
#pragma once
#include "character.h"
class player :
public character
private:
public:
player();
~player();
;
#pragma once
#include "character.h"
class monster :
public character
public:
monster();
~monster();
private:
;
#include "character.h"
#include <iostream>
using namespace std;
character::character()
xpos = 0;
ypos = 0;
character::~character()
void character::moveChar(int Xpos, int Ypos)
xpos = Xpos;
ypos = Ypos;
void character::printPos()
cout << "Position: " << xpos << " . " << ypos << endl;
void character::getPos(int& Xpos, int& Ypos)
Xpos= xpos;
Ypos= ypos;
#pragma once
class character
public:
character();
~character();
void moveChar(int Xpos, int Ypos);
void printPos();
void getPos(int& Xpos, int& Ypos);
protected:
int xpos;
int ypos;
;
【问题讨论】:
第一个可能的错误:void initialize();
声明了一个名为 initialize
的函数。如果你想调用一个名为initialize
的函数,你需要说initialize();
。
第二个可能的错误:if (temp = true)
。你可能想说if (temp == true)
。顺便说一句,这是多余的和令人困惑的。说if (temp)
附带说明,您的吸气剂并不那么直观。我建议您创建一个 struct Point int x, int y, Point(int xc, int yc) : x(xc), y(yc) 并在调用 getter 时返回 Point。你总是可以使用引用/指针。
【参考方案1】:
int main()
void initialise();
...
上面没有调用函数初始化。尽管您没有发布该函数,但我想它会初始化您的数组和变量...改为:
int main()
initialise();
...
并将initialize()的定义移到main之前,或者至少声明它的原型。
【讨论】:
@anon 请重新阅读编辑。将 initialize() 的定义移到 main 之前,或者至少放置其原型的声明。 在调用它之前在 main 函数之上初始化它。它现在可以工作了,谢谢【参考方案2】:把你的 charactoer::getPos 函数改成这样:
void character::getPos(int& Xpos, int& Ypos)
Xpos = xpos;
Ypos = ypos;
语句 Xpos *= xpos 等价于 Xpos = Xpos * xpos。这不是您想要的,尤其是因为您的 Xpos 参数未初始化。
【讨论】:
第 5 周 prograqmming.exe 0x00CB5A89 处的第一次机会异常:0xC0000005:访问冲突读取位置 0x00000000。第 5 周 prograqmming.exe 中 0x00CB5A89 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。线程 0x2cc0 已退出,代码为 -1073741510 (0xc000013a)。线程 0x2528 已退出,代码为 -1073741510 (0xc000013a)。线程 0x2964 已退出,代码为 -1073741510 (0xc000013a)。线程 0x2c54 已退出,代码为 -1073741510 (0xc000013a)。程序“[7232] 第 5 周 programraqmming.exe”已退出,代码为 -1073741510 (0xc000013a)。 您将不得不通过调试器。否则发布一个完整的例子。您发布的代码不完整。以上是关于为啥当从派生类访问基类的数据时它会返回废话(我认为是指针数据)的主要内容,如果未能解决你的问题,请参考以下文章