【发布时间】:2014-06-04 00:40:34
【问题描述】:
我的 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)
catch 函数接收什么?
【问题讨论】:
标签: c++ exception exception-handling namespaces