PDA

View Full Version : Throwing Exceptions




LD220
Jun 9, 2009, 01:45 PM
Hi guys. This forum really helped me out last time and I'm hoping you'll be able to again. Like I said in my last thread, I'm new to C++ and using the book 'SAMS Teach Yourself C++ in 10 Minutes" to try to learn on my own. I'm in Lesson 11 and it wants me to throw an exception. I've added the #include <exception> line to the top of my file and using namespace std; was already in there. In main() I use this catch statement (straight from book)

catch (runtime_error RuntimeError)
{
SAMSErrorHandling::HandleRuntimeError(RuntimeError);
}

This is in my Accumulator() function

default:
throw
runtime_error
("Error - Invalid operator");
break;

and this is in my ErrorHandling module
int HandleRuntimeError(runtime_error theRuntimeError)
{
cerr <<
theRuntimeError.what() <<
endl;

return 1;
}

I've uploaded the files as .txt, so it might be easier to help (the header is renamed since before it was .h and it didn't complain about me having 2 files that are the same). I keep getting a ton of errors. Here's what I got when I tried g++ ErrorHandlingModule.cpp PromptModule.cpp main.cpp

ErrorHandlingModule.cpp:27: error: ‘runtime_error’ was not declared in this scope
ErrorHandlingModule.cpp:28: error: expected ‘,’ or ‘;’ before ‘{’ token
main.cpp:2: error: expected constructor, destructor, or type conversion before ‘<’ token
main.cpp: In function ‘float Accumulate(char, float)’:
main.cpp:41: error: ‘runtime_error’ was not declared in this scope
main.cpp: In function ‘int main(int, char**)’:
main.cpp:61: error: expected type-specifier before ‘runtime_error’
main.cpp:61: error: expected `)' before ‘RuntimeError’
main.cpp:61: error: expected `{' before ‘RuntimeError’
main.cpp:61: error: ‘RuntimeError’ was not declared in this scope
main.cpp:61: error: expected `;' before ‘)’ token
main.cpp:65: error: expected primary-expression before ‘catch’
main.cpp:65: error: expected `;' before ‘catch’
main.cpp:70: error: ‘SAMSPrompt’ has not been declared
main.cpp:70: error: ‘UserWantsToContinueYOrN’ was not declared in this scope
main.cpp:73: error: expected `while' at end of input
main.cpp:73: error: expected `(' at end of input
main.cpp:73: error: expected primary-expression at end of input
main.cpp:73: error: expected `)' at end of input
main.cpp:73: error: expected `;' at end of input
main.cpp:73: error: expected `}' at end of input

Does anyone have any idea what's going wrong? Sorry for the really long post.



gnasher729
Jun 9, 2009, 05:57 PM
Looks like the compiler cannot see a declaration of "runtime_error" where it is needed.

Many people avoid "using" and instead qualify names like

catch (std::runtime_error) ...

It costs you five keystrokes each time, but the good thing is that if you don't know all the "std" identifiers by heart, you still know that runtime_error is supposed to be a std:: thing.

So try std::runtime_error. Check that you include the right header file. In XCode, open a file that doesn't compile, then choose "Preprocess" from the build menu. This will create a window with exactly what is being compiled. Look for runtime_error in there. If it isn't there, maybe you are including the wrong header file. Maybe runtime_error isn't actually defined in <exceptions> but somewhere else.

LD220
Jun 9, 2009, 07:22 PM
Thanks for your help! I did a little digging and found a file called stdexcept, which includes the runtime_error object. Everything seems to be working fine now.