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