У меня в основном exp>=level*10
в выражении else if
, где уровень - переменная, а 10 - постоянное число. Код компилируется полностью без ошибок, и до недавнего времени он работал даже после компиляции. теперь, всякий раз, когда он компилируется и выполняется, он выдает мне сообщение «недопустимый нулевой указатель» и удобно сообщает, что проблема связана с включенным файлом xstring (VS2010 включает его в новые проекты) в строке 930.
Есть ли способ заставить программу читать ее как оператор умножения вместо нулевого указателя?
РЕДАКТИРОВАТЬ: Вот мой полный код, пожалуйста, обратите внимание, что это прототип, созданный, чтобы убедиться, что он будет работать и был сделан до того, как я понял, что я могу использовать производные классы для этого. также обратите внимание, что я попытался удалить using namespace std
, чтобы проверить, не в этом ли проблема.
#include "stdafx.h"
#include <iostream>
#include <sstream>
class player {
public:
std::string name;
int hp;
int attack;
int strength;
int defense;
void reward(int gold, int exp) {
player::gold += gold;
player::exp += exp;
player::levelHandler();
}
int dataQuery(std::string query) {
if (query == "equipment")
return helm, armour, greaves;
else if (query == "gold")
return gold;
else if (query == "exp")
return exp;
else if (query == "level")
return level;
else return 0;
}
private:
int helm;
int armour;
int greaves;
int level;
int gold;
int exp;
std::string levelHandler() {
if (level==0) {
level=1;
}
else if (exp>=(10*level)) { //causes problem due to * being mistaken as a
//null pointer.
int previousLevel = level;
level += 1;
levelHandler();
return 0;
};
return 0;
};
} hero;
class enemy {
public:
std::string name;
int hp;
int attack;
int strength;
int defense;
private:
int helm;
int armour;
int greaves;
int level;
int goldReward;
int expReward;
int dataQuery(std::string query) {
if (query == "equipment")
return helm, armour, greaves;
else if (query == "gold")
return goldReward;
else if (query == "exp")
return expReward;
else if (query == "level")
return level;
else return 0;
}
};
int main()
{
std::cout << "Please enter your character's name..." << std::endl;
std::cin >> hero.name;
std::cout << "Welcome to RPG Battle Simulation, " << hero.name << "!" << std::endl;
hero.reward(100, 0); //problem is either this line, or the function's call to levelHandler, as this is where the program terminates.
std::cout << "You are beginning your journey as a level " << hero.dataQuery("level") << " character." << std::endl;
std::cout << "Here is " << hero.dataQuery("gold") << " gold to get you started." << std::endl;
return 0;
};
Ниже приведен отрывок xstring, вызывающий проблему. проблема возникает из _DEBUG_POINTER(_Ptr);
(строка 930)
_Myt& assign(const _Elem *_Ptr)
{// assign [_Ptr, <null>)
_DEBUG_POINTER(_Ptr);
return (assign(_Ptr, _Traits::length(_Ptr)));
}