Note that there are some explanatory texts on larger screens.

plurals
  1. POUnhanded Exceptions
    primarykey
    data
    text
    <p>Unhandled exception at 0x001AF3B5 in test.exe: 0xC0000005: Access violation reading location 0x00000000.</p> <p>getting an unhandled exception when i implement this code in my project <a href="http://sourcemaking.com/design_patterns/command/cpp/2" rel="nofollow">http://sourcemaking.com/design_patterns/command/cpp/2</a></p> <pre><code>#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class Person; class Command { // 1. Create a class that encapsulates an object and a member function // a pointer to a member function (the attribute's name is "method") Person *object; // void(Person:: *method)(); public: Command(Person *obj = 0, void(Person:: *meth)() = 0) { object = obj; // the argument's name is "meth" method = meth; } void execute() { (object-&gt; *method)(); // invoke the method on the object } }; class Person { string name; // cmd is a "black box", it is a method invocation // promoted to "full object status" Command cmd; public: Person(string n, Command c): cmd(c) { name = n; } void talk() { // "this" is the sender, cmd has the receiver cout &lt;&lt; name &lt;&lt; " is talking" &lt;&lt; endl; cmd.execute(); // ask the "black box" to callback the receiver } void passOn() { cout &lt;&lt; name &lt;&lt; " is passing on" &lt;&lt; endl; // 4. When the sender is ready to callback to the receiver, // it calls execute() cmd.execute(); } void gossip() { cout &lt;&lt; name &lt;&lt; " is gossiping" &lt;&lt; endl; cmd.execute(); } void listen() { cout &lt;&lt; name &lt;&lt; " is listening" &lt;&lt; endl; } }; int main() { // Fred will "execute" Barney which will result in a call to passOn() // Barney will "execute" Betty which will result in a call to gossip() // Betty will "execute" Wilma which will result in a call to listen() Person wilma("Wilma", Command()); // 2. Instantiate an object for each "callback" // 3. Pass each object to its future "sender" Person betty("Betty", Command(&amp;wilma, &amp;Person::listen)); Person barney("Barney", Command(&amp;betty, &amp;Person::gossip)); Person fred("Fred", Command(&amp;barney, &amp;Person::passOn)); fred.talk(); } </code></pre> <p>Not sure at all why? I implemented it as it no changes except the output is different and only 2 people instead of the 4. Tried a bit of debugging and its erroring at execute() in command.</p> <p>Any help or tips would be great!</p> <p>EDIT: Actually after some testing its when i change the people and the calls that it is happening not sure why.</p> <pre><code> Person player("Player", Command()); Person master("House Master", Command(&amp;player, &amp;Person::passOn)); master.talk(); </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload