C++ 或C++;:VS2010乘法运算符被误认为空指针
我基本上在C++ 或C++;:VS2010乘法运算符被误认为空指针,c++,pointers,multiplication,C++,Pointers,Multiplication,我基本上在表达式中有exp>=level*10,else if表达式中,level是一个变量,10是一个常量。这段代码编译得非常好,没有任何错误,甚至在编译之后,直到最近,它都能正常工作。现在,每当它编译和执行时,它都会给我一个错误,说“无效的空指针”,并且它方便地告诉我问题来自第930行包含的文件xstring(VS2010将其包含在新项目中)。 有没有办法强制编程将其作为乘法运算符而不是空指针读取? 编辑:这是我的完整代码,请注意,这是一个protype,创建它是为了确保它能够工作,并且是在
表达式中有exp>=level*10
,else if
表达式中,level是一个变量,10是一个常量。这段代码编译得非常好,没有任何错误,甚至在编译之后,直到最近,它都能正常工作。现在,每当它编译和执行时,它都会给我一个错误,说“无效的空指针”,并且它方便地告诉我问题来自第930行包含的文件xstring(VS2010将其包含在新项目中)。
有没有办法强制编程将其作为乘法运算符而不是空指针读取?
编辑:这是我的完整代码,请注意,这是一个protype,创建它是为了确保它能够工作,并且是在我意识到可以使用派生类之前完成的。还请注意,我尝试使用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;
};
此程序再现您的问题(使用支持调试的运行时MSVC编译时):
#包括
#包括
int main()
{
使用名称空间std;
字符串s=0;
cout此程序再现您的问题(使用支持调试的运行时MSVC编译时):
#包括
#包括
int main()
{
使用名称空间std;
字符串s=0;
问题可能出在其他地方。你确定你使用的是正确的二进制/源代码版本吗?即使没有代码,我也可以告诉你,你的解释和建议的解决方案是错误的。如果你需要真正的帮助,请发布真正的代码。level*10
始终是一个乘法。它不能是其他任何东西。问题出在其他地方。你知道吗你确定你使用的是正确的二进制/源代码版本吗?即使没有代码,我也可以告诉你,你的解释和建议的解决方案是不正确的。如果你需要真正的帮助,请发布真正的代码。level*10
始终是一个乘法。它不能是其他任何东西。是的,我尝试删除namespace std
并用s替换它td::
只要有必要,但它不起作用,因此,我编辑了我的问题以包含源代码。你的levelHandler
函数就是一个例子。啊,我现在明白了。早些时候,在我意识到我可以直接在函数中执行cout之前,我试图让它返回字符串,但我忘了将其更改回void函数。谢谢。现在,为了找到选择最佳答案按钮;)是的,我尝试删除namespace std
,并在必要时将其替换为std::
,但它不起作用,因此,我编辑了我的问题以包含源代码。你的levelHandler
函数就是一个例子。啊,我现在明白了。之前我是在我意识到我可以直接在函数中执行cout之前,试图让它返回字符串,但我忘了将其更改回void函数。谢谢。现在,要找到“选择最佳答案”按钮;)
_Myt& assign(const _Elem *_Ptr)
{// assign [_Ptr, <null>)
_DEBUG_POINTER(_Ptr);
return (assign(_Ptr, _Traits::length(_Ptr)));
}
#include <string>
#include <iostream>
int main()
{
using namespace std;
string s = 0;
cout << s << endl;
}