Unhandled exception error

Apr 22, 2021 at 2:53am
i'm doing a token taking game that involves a recursive function, I have some guidelines but I need another insight to figure out what's wrong.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//Token_Taking.cpp
#include "Token_Taking.h"


Token_Taking::Token_Taking(unsigned int maxTarget, unsigned int maxTurns): target(maxTarget), turns(maxTurns){}	

//The function only takes one argument which is the tokens
bool Token_Taking::play(unsigned int tokens) { 

	bool Game::play(unsigned int tokens) {

	if (tokens == target) { return true; }

	if (turns == 0 && tokens != target) { return false; }

	if (tokens % 2 == 1) {
		pattern.push_back('A');
		turns = turns - 1;
		if (play(tokens + 39)) { return true; }
		else {
			turns++;
			pattern.pop_back();

		}
	}

	if (tokens % 2 == 0) {
		pattern.push_back('B');
		turns -= 1;

		if (play(tokens / 2)) { return true; }
		
		else {
			turns++;
			pattern.pop_back();

		}
	}

}
	

void Token_Taking::result(ostream& out) const {

	if (!pattern.size()) {out << "You Lost" << std::endl;}

	else {

		for (size_t i = 0; i < pattern.size(); i++) {out << pattern.at(i);}
		out << std::endl;
	}
}

Last edited on Apr 23, 2021 at 8:05pm
Apr 22, 2021 at 7:04am
Have you tried using a debugger?
Apr 22, 2021 at 12:35pm
Nope.
But I think my problem is in the constructor. Am I initializing correct the arguments?
Last edited on Apr 22, 2021 at 12:35pm
Apr 22, 2021 at 12:46pm
1
2
while (fin >> targetval>>turnsval) {
		player.play(targetval); 

Why aren't you using turnsval anywhere?

> Am I initializing correct the arguments?
From the description of what it should take, no.

This seems more like what needs to work.
1
2
3
while (fin >> targetval>>turnsval) {
    Token_Taking player(targetval,turnsval);
    player.play(); 

Apr 22, 2021 at 1:19pm
I tried it and it says that the constructor argument list doesn't match
1
2
Token_Taking player(targetval,turnsval); 
    player.play(); //Here it says that it has too few arguments 

Last edited on Apr 22, 2021 at 1:32pm
Apr 22, 2021 at 1:40pm
limonconsal wrote:

Nope.
But I think my problem is in the constructor. Am I initializing correct the arguments?


Using a debugger would answer that question, as long as the code compiles.

I tried it and it says that the constructor argument list doesn't match


Post the actual compiler output, not your abbreviated interpretation of it.
Apr 22, 2021 at 1:45pm
Error (active) E0289 no instance of constructor "Token_Taking::Token_Taking" matches the argument list

Apr 22, 2021 at 1:50pm
You declare/define a zero-arg consructor.
Token_Taking(); //Constructor

But you are attempting to use this constructor as if it has two parameters.
Token_Taking player(targetval, turnsval);

If you want to pass those two variables as parameters, then change your constructor.
Token_Taking(int target, int turns);

1
2
3
4
Token_Taking::Token_Taking(int target, int turns)
 : target(target), turns(turns) {
   // (patterns is now an empty vector, already defined in the class.)
}	
Last edited on Apr 22, 2021 at 1:51pm
Apr 22, 2021 at 2:15pm
Hello, I already fixed it in the program and edited the rest. Looks better but now I'm getting an unhandled exception in the play function.
I got this: Unhandled exception at 0x00D0718A

So far in my output file I got an "A"
Is it my recursive function lacking something?
Last edited on Apr 22, 2021 at 2:35pm
Apr 22, 2021 at 3:33pm
Assuming that you designed this program and then coded this from the design - then you know how it's supposed to work. As it's not then the first thing to do is to use the debugger to debug the program - trace the execution path, watch the variable contents etc. When this deviates from that expected then you're found a problem - which is either with the coding or the design. Fix that. Then repeat this until the program works as expected.

Debugging is a skill which needs to be acquired and honed. Unfortunately this is very often either not taught or not taught well.
Last edited on Apr 22, 2021 at 3:35pm
Apr 22, 2021 at 3:34pm
Is it my recursive function lacking something?

Probably. This is where a debugger can help, so you can step through your function and see where it is going awry. In general, recursion is more confusing that iteration, so I tend to avoid recursive functions except for tree-like structures (personally). I would prefer a while loop in this situation.

Lines 25 & 28: You have an if-else chain here. It's either going to enter one branch, or the other, and you have return statements in both branches. Therefore, lines 34 and beyond will never be hit. If there is vital logic within those lines, it will never happen.

I would also add checks before you pop_back to make sure your container has at least 1 element in it.
Last edited on Apr 22, 2021 at 3:39pm
Apr 22, 2021 at 3:46pm
Alright, I will comment and test each line and see what happens! And no, the code is an homework. I solved the unhandled exception but my logic is still not generating the correct output. I must use recursive (which is very new to me) I will update the code.
Last edited on Apr 23, 2021 at 12:14am
Topic archived. No new replies allowed.