或c++: VS2010乘法运算符被误认为空指针

or C++: VS2010 multiplication operator being mistaken for a null pointer

本文关键字:运算符 误认为 空指针 c++ VS2010      更新时间:2023-10-16

我基本上在else if表达式中有exp>=level*10,其中level是一个变量,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)));
       }

此程序重现您的问题(当使用支持调试的运行时的MSVC编译时):

#include <string>
#include <iostream>
int main()
{
    using namespace std;
    string  s = 0;
    cout << s << endl;
}

问题是std::string是用空指针初始化的。

EDIT:哦,忘了说,解决方案& &;请不要那样做。

干杯,hth。