?
Wie net schon richtig bemerkt hat, erzeugst du kein Objekt deiner Klasse in der main. Um das zu können brauchst du in der Klasse einen Konstruktor. Dieser ersetzt dann eigentlich deine calculator::init. In der main unten siehst du den Aufruf des Konstruktors, der ein Klassenobjekt mit dem Namen berechnung erzeugt.
Dann brauchst du eigentlich in deiner Klasse keine Variable result, weil du ja mit deinen Funktionen double addition(double, double),double subtract(double, double), double multiply(double, double) und double divide(double, double) ja schon Rückgabewerte vorsiehst.
Ich hab mal ne kleine Datei geschrieben, wo ich ein paar Änderungen vorgenommen hab. Ich hab sie aber noch nicht ausprobiert, also alles ohne Gewähr.
#include "calculator.h"
#include <iostream>
using namespace std;
calculator::calculator(double a, double b, int c):op1_(a),op2_(b),rechenart_(c) {
switch(getrechenart()) {
case 1: cout << addition(getopeins(),getopzwei());
break;
case 2: cout << subtract(getopeins(),getopzwei());
break;
case 3: cout << multiply(getopeins(),getopzwei());
break;
case 4: cout << divide(getopeins(),getopzwei());
break;
}
}
double calculator::addition(const double& n1,const double& n2) {
return (n1+n2); }
double calculator::subtract(const double& n1,const double& n2) {
return (n1-n2); }
double calculator::multiply(const double& n1,const double& n2) {
return (n1*n2); }
double calculator::divide(const double& n1,const double& n2) {
return (n1/n2); }
int calculator::getrechenart() const {
return rechenart_;
}
double calculator::getopeins() const {
return op1_; }
double calculator::getopzwei() const {
return op2_; }
int main()
{
cout<<"Calculator 0.1 launched"<<endl;
cout<<"Zum beenden beliebigen Buchstaben eingeben."<<endl;
cout<<"Bitte geben sie die beiden Operanden und die Rechenart(1 für +, 2 für -, 3 für *,4 für //) ein."<<endl<<"Bestätigen sie die Eingabe jeweils mit [ENTER]"<<endl;
double a, b;
int c;
while(cin>>a>>b>>c)
{
if((c==1)||(c==2)||(c==3)||(c==4))
{
calculator berechnung(a, b, c);
}
else
{
cout<<"Ungueltige Eingabe!"<<endl;
continue;
}
}
return 0;
}
Hier noch eine von mir ein wenig abgeänderte header-Datei. Die größte Änderung ist eigentlich, dass ich mit Memberfunktionen die Klassenvariablen auslese.
#ifndef _CALCULATOR_
#define _CALCULATOR_
class calculator {
public:
calculator(double, double, int);
double addition(const double&,const double&);
double subtract(const double&,const double&);
double multiply(const double&,const double&);
double divide(const double&,const double&);
int getrechenart() const;
double getopeins() const;
double getopzwei() const;
private:
double op1_, op2_;
int rechenart_;
}
#endif //_CALCULATOR_
Ich hab den Code noch nicht ausprobiert, es können also durchaus noch Fehler auftreten.
MfG JS