我有一个OOP课程的作业来创建一个基本的计算器。分配的目标是练习名称空间和异常处理。
为了清楚起见,我会粘贴问题的文字:
你必须实现类Kalkulator,它解决了基本的数学表达式并将结果作为整数返回。
类Kalkulator应放在名为Matematika的名称空间中。需要在没有.cpp文件的头文件中实现整个类。
你必须定义两个异常并将它们抛出正确的情况(它们在主函数中被捕获)
他们也给了我主要的功能:
#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)
什么是捕获函数接收?
答案 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
}
}