C++ 未处理的异常:访问冲突读取位置

C++ 未处理的异常:访问冲突读取位置,c++,design-patterns,command,C++,Design Patterns,Command,test.exe中0x001AF3B5处未处理的异常:0xC0000005:访问冲突读取位置0x00000000 在项目中实现此代码时获取未处理的异常 问题是,您允许使用空命令,甚至在不检查的情况下执行它 将命令的构造函数更改为此应该可以解决问题: Command(Person &obj, void(Person:: *meth)()) passOn在player上调用cmd.execute(),但是player没有下一个命令…个人玩家(“player”,command());调用命令

test.exe中0x001AF3B5处未处理的异常:0xC0000005:访问冲突读取位置0x00000000

在项目中实现此代码时获取未处理的异常


问题是,您允许使用空命令,甚至在不检查的情况下执行它

将命令的构造函数更改为此应该可以解决问题:

Command(Person &obj, void(Person:: *meth)())

passOn
player
上调用
cmd.execute()
,但是
player
没有下一个命令…个人玩家(“player”,command());调用命令的默认构造函数,并将obj和方法都设置为未定义(如果在调试模式下使用Visual Studio,则为NULL)。Person master(“House master”,Command(&player,&Person::passOn))然后使用一个Command对象创建一个Person对象,该对象的obj是player,Command是passOn,但当调用passOn时,它会在player上调用cmd.execute(),player的方法为null。
    Person player("Player", Command());
    Person master("House Master", Command(&player, &Person::passOn));
    master.talk();
Command(Person &obj, void(Person:: *meth)())