Avatar of NSing9
NSing9Flag for United States of America asked on

How do I modify a C++ class to handle unitialized variables?

How do I modify the  attached C++ class to handle unitialized variables?  It is a symbol table and I want it to display an error such as "Uninitialized Variable y" for expressions like:
(x/y), x = 1;

#include <string>
#include <vector>
using namespace std;

#include "symboltable.h"

void SymbolTable::insert(string variable, double value)
{
    const Symbol& symbol = Symbol(variable, value);
    elements.push_back(symbol);
}

double SymbolTable::lookUp(string variable) const
{
    for (int i = 0; i < elements.size(); i++)
		if (elements[i].variable == variable)
			return elements[i].value;
    return -1;
}

Open in new window

C++C

Avatar of undefined
Last Comment
Infinity08

8/22/2022 - Mon
Infinity08

Right now, your SymbolTable::lookUp function is returning -1 when the symbol is not found.

If you want to generate an exception, here are two options :

(a) let SymbolTable::lookUp throw an exception instead of returning -1.

(b) let the calling code throw an exception when -1 is returned.

Either way, make sure to catch the exception somewhere, and handle it appropriately (by displaying an error message eg.).

If you have specific issues with how exceptions are implemented in code, here's a nice basic tutorial about them :

        http://www.cplusplus.com/doc/tutorial/exceptions/

If your problem is something else, please let us know what exactly.
ASKER
NSing9

Thanks.  I think that is where the problem lies.  I don't know how to implement that portion of the code.  I have read the tutorial about exceptions a few time already, but still can't seem to implement the correct code.
Infinity08

Could you post what you tried here ? That way, it'll be easier for me to see where the problem lies.
Your help has saved me hundreds of hours of internet surfing.
fblack61
ASKER
NSing9

Yes, here are the four files that I have been working with.  I have tired making the changes in both the main class and variable class.
Test.cpp
DivideByZeroException.h
symboltable.cpp
variable.cpp
ASKER CERTIFIED SOLUTION
Infinity08

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
See how we're fighting big data
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
davesgonebananas

You're calling throw UninitializedException() where that looks to be a class. You probably need to create an object of type UnitializedException and throw that instead.

throw new UnitializedException();
Infinity08

>> throw new UnitializedException();

I would NOT recommend throwing a pointer - especially not a pointer to dynamically allocated memory (that can cause all kinds of issues - eg. if the cause of the exception was an out-of-memory condition).

Instead, throw objects whenever you can (and catch them by reference in order to avoid unnecessary copies).

So, the current code is just fine.
Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.
ASKER
NSing9

It finally worked.  I had too many windows open in my compiler.  I had a catch block for exceptions of the type UninitializedException but I had entered it in the wrong file.  I also had a UninitializedException.h, but I attached the wrong one to my comments.  It is working perfectly now.  Thanks for your help!
Infinity08

Great :)