Ending Function on Error then Continue in main()

Discussion in 'C++' started by - Steve -, Jul 29, 2003.

  1. - Steve -

    - Steve - Guest

    I have a situtation where if a overloaded operator is used incorrectly I
    need it to cout some info to the screen, end the function it was called in,
    and continue on in main. How on earth do you do that?

    The exact example can be found at http://planetevans.com/c under test 17,
    18, and 19.

    One of the specific examples is

    test17()
    {
    cout << "17. Array declared with illegal array bounds: IntArray f(5,
    2);" << endl << endl;
    IntArray f(5, 2); //illegal becuase it is trying to define an
    array with an index going from 5 to 2. The constructor is show below
    for(int i = f.low(); i <= f.high(); ++i) //dont want this to run
    f = i * 10; //dont want this to run
    cout << f << endl; //dont want this to run
    }

    IntArray::IntArray(int low, int high)
    {
    arrayLow=low; //start of array index
    arrayHigh=high; //end of array index
    if(arrayHigh>=arrayLow)
    array=new int[arrayHigh-arrayLow+1]; //create array memory
    locations
    else
    cout << "Low Array Boundry Higher than High Array Boundry" << endl;
    //now I need to end the function that this was called from
    }
     
    - Steve -, Jul 29, 2003
    #1
    1. Advertising

  2. - Steve -

    - Steve - Guest

    "Heinz Ozwirk" <> wrote in message
    news:bg4vq4$d7a$02$-online.com...
    "- Steve -" <> schrieb im Newsbeitrag
    news:t0mVa.95984$...
    : I have a situtation where if a overloaded operator is used incorrectly I
    : need it to cout some info to the screen, end the function it was called
    in,
    : and continue on in main. How on earth do you do that?

    >>Avoid reporting errors on the screen in functions you (or others) might

    use again in other programs. Report them to the calling program and let the
    program (and >>its programmer) decide how to handle them. That's what
    exceptions have been invented for. Have a look at try/catch/throw and
    std::exception.

    >>Regards
    >> Heinz


    Unfortantley it's a requirment for the assignment I've been given.
     
    - Steve -, Jul 29, 2003
    #2
    1. Advertising

  3. - Steve - wrote:
    >
    > test17()
    > {
    > cout << "17. Array declared with illegal array bounds: IntArray f(5,
    > 2);" << endl << endl;
    > IntArray f(5, 2); //illegal becuase it is trying to define an
    > array with an index going from 5 to 2. The constructor is show below
    > for(int i = f.low(); i <= f.high(); ++i) //dont want this to run
    > f = i * 10; //dont want this to run
    > cout << f << endl; //dont want this to run
    > }
    >
    > IntArray::IntArray(int low, int high)
    > {
    > arrayLow=low; //start of array index
    > arrayHigh=high; //end of array index
    > if(arrayHigh>=arrayLow)
    > array=new int[arrayHigh-arrayLow+1]; //create array memory
    > locations
    > else
    > cout << "Low Array Boundry Higher than High Array Boundry" << endl;
    > //now I need to end the function that this was called from
    > }



    As Heinz has already told you: you could throw an exception in the constructor.
    Another possibility would be:

    class IntArray
    {
    public:
    IntArray( int LowBound, int HighBound );

    bool IsGood();

    ...
    };

    void test17()
    {
    IntArray f( 5, 2 );

    if( !f.IsGood() )
    return;

    ...
    }


    --
    Karl Heinz Buchegger
     
    Karl Heinz Buchegger, Jul 29, 2003
    #3
  4. - Steve -

    Simon Turner Guest

    "- Steve -" <> wrote in message
    news:<c%nVa.96784$>...
    > "Heinz Ozwirk" <> wrote in message
    > news:bg4vq4$d7a$02$-online.com... "- Steve -"
    > <> schrieb im Newsbeitrag
    > news:t0mVa.95984$...
    > : I have a situtation where if a overloaded operator is used
    > : incorrectly I need it to cout some info to the screen, end the
    > : function it was called in, and continue on in main. How on earth do
    > : you do that?
    >
    > >> Avoid reporting errors on the screen in functions you (or others)
    > >> might use again in other programs. Report them to the calling
    > >> program and let the program (and its programmer) decide how to
    > >> handle them. That's what exceptions have been invented for. Have a
    > >> look at try/catch/throw and std::exception.

    >
    > >>Regards Heinz

    >
    > Unfortantley it's a requirment for the assignment I've been given.


    The "Avoid reporting errors on the screen..." is a recommendation that
    you should avoid it in general. If you need to do it here, then do it.

    The advice on using exceptions is orthogonal, and is what you need.
    Note that it isn't an overloaded operator you're using incorrectly, but
    the constructor. Anyway, your code should probably look like:

    #include <stdexcept>

    class IntArray
    {
    public:
    IntArray(int low, int high)
    {
    if( low > high )
    // add output here if you need it
    throw std::range_error("IntArray: low > high");

    //...your code...
    }
    };

    void test17()
    {
    IntArray f(5,2); //this will throw straight away

    //...this code will not be reached...
    }

    int main()
    {
    try {
    //...
    test17();
    //...

    } catch( std::exception& ex ) {
    // we come straight here after IntArray::IntArray
    // throws std::runtime_error, skipping the rest of
    // test17().
    }
    }
     
    Simon Turner, Jul 29, 2003
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. buran
    Replies:
    2
    Views:
    64,026
    buran
    Mar 28, 2005
  2. Replies:
    0
    Views:
    420
  3. ravi
    Replies:
    28
    Views:
    982
    Richard Heathfield
    Sep 26, 2007
  4. Replies:
    0
    Views:
    295
  5. Kafer
    Replies:
    3
    Views:
    162
    Kafer
    Oct 8, 2003
Loading...

Share This Page