Throwing Exceptions

Discussion in 'Mac Programming' started by LD220, Jun 9, 2009.

  1. macrumors member

    Joined:
    Jun 3, 2009
    #1
    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.
     

    Attached Files:

  2. macrumors G5

    gnasher729

    Joined:
    Nov 25, 2005
    #2
    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.
     
  3. thread starter macrumors member

    Joined:
    Jun 3, 2009
    #3
    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.
     

Share This Page