C ++中的异常处理类

时间:2014-06-04 00:40:35

标签: c++ exception exception-handling namespaces

我有一个OOP课程的作业来创建一个基本的计算器。分配的目标是练习名称空间和异常处理。

为了清楚起见,我会粘贴问题的文字:

你必须实现类Kalkulator,它解决了基本的数学表达式并将结果作为整数返回。

类Kalkulator应放在名为Matematika的名称空间中。需要在没有.cpp文件的头文件中实现整个类。

你必须定义两个异常并将它们抛出正确的情况(它们在主函数中被捕获)

  • IncorrectDataExc将该类放入命名空间Matematika-> Exceptions
  • InvalidOperationExc将该类放入命名空间Matematika-> Exceptions

他们也给了我主要的功能:

#include <iostream> 
#include <string> 
#include "Kalkulator.h" 
#include "IncorrectDataExc.h" 
#include "InvalidOperationExc.h" 

using namespace std; 

int main() 
{ 
    string s; 
    getline(cin, s); 

    try 
    {
        Matematika::Kalkulator kalkulator;
        cout << kalkulator.izracunaj(s) << endl;
    } 
    catch(Matematika::Exceptions::IncorrectDataExc) 
    { 
        cout << "Exception IncorrectData" << endl;
    } 
    catch(Matematika::Exceptions::InvalidOperationExc) 
    { 
        cout << "Exception InvalidOperation" << endl;
    } 

    return 0; 
}

我遇到的问题是,当我得到异常时我不知道该扔什么,我不知道InvalidOperationExc和IncorrectDataExc类应该是什么样子,因为我不知道catch函数是什么实际捕捉(一个对象?)

我必须创建3个头文件:

IncorrectDataExc.h
InvalidOperationExc.h 
Kalkulator.h

这是我到目前为止所拥有的

#pragma once
#include <string>
#include <sstream>


using namespace std;

namespace Matematika{

class Kalkulator{
private:


public:
    int izracunaj(string mojString)
    {
        int prviBroj = 0;
        int drugiBroj = 0;
        char operacija = ' ';
        stringstream ss(mojString);
        ss >> prviBroj >> operacija >> drugiBroj;
        if(operacija != '*' && operacija != '+' && operacija != '/' && operacija != '-')
        {
            Matematika::Exceptions::InvalidOperationExc greska1;
            throw greska1;
        }
        if(prviBroj % drugiBroj != 0)
        {
            Matematika::Exceptions::IncorrectDataExc greska2;
            throw greska2;
        }
    }
};
}

我收到了一些错误:

'Exceptions': the symbol to the left of a '::' must be a type
'InvalidOperationExc' : is not a member of 'Matematika'
'InvalidOperationExc' : undeclared identifier
 missing ';' before identifier 'greska1'
'greska1' : undeclared identifier
'greska1' : undeclared identifier

我不知道我做错了什么。令我困惑的部分是这个

    catch(Matematika::Exceptions::IncorrectDataExc) 

什么是捕获函数接收?

2 个答案:

答案 0 :(得分:0)

非常自我解释的错误:

  

'InvalidOperationExc':不是'Matematika'的成员

换句话说,它不存在。此

 Matematika::Exceptions::InvalidOperationExc greska1;

导致错误。您应该将InvalidOperationExc更改为其他内容,或者在Matematika中创建。

答案 1 :(得分:0)

int izrakunaj()不需要Matematika::...来访问名称空间Matematika的成员,因为它也是成员。

namespace ns
{
    int integer; //ns::integer
    void set0(){integer=0;} //modifies the variable above
    void set1(){ns::integer=1;} //modifies the variable below

    namespace ns
    {
        int integer; //ns::ns::integer
    }

}