PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Klassen



F1lehunt3r
08.11.2008, 16:35
Hallo Leute,

habe vor einigen Tagen wieder mit C/C++ angefangen. Bin derzeit biem Kapitel Klassen, genauer beim Überladen von Methoden. Ich habe alles genau so befolgt wie es im Buch stand und den Abschnitt 5 mal gelesen, finde den Fehler aber trotzdem nicht. Wäre schön wenn mal jemand über meinen Code schaut und mir zeigt was ich falsch gemacht habe.

Becher.h

#pragma once
#include <string>

class Becher
{
public:
std::string inhalt;
double fuellmenge;
int fassungsvermoegen;
Becher(std::string in, double fuell, int fass);
void ausgabe();
bool reichtKapazitaet(int ml);
};


Becher.cpp

#include "Becher.h"
#include <string>
#include <iostream>

Becher::Becher(std::string in, double fuell, int fass)
: inhalt(in), fuellmenge(fuell), fassungsvermoegen (fass)
{
}
void Becher::ausgabe() {
std::cout << "Der Becher ist mit " << this->inhalt << " gefüllt.";
}
bool Becher::reichtKapazitaet(int ml) {
double platz = fassungsvermoegen-(fassungsvermoegen/100*fuellmenge);
return (platz >= ml);
}
bool Becher::reichtKapazitaet(Becher* b) {
if(inhalt != b->inhalt)
return (false);
return(reichtKapazitaet(
static_cast<int>(b->fassungsvermoegen/100.0F*
b->fuellmenge)));
}

Class.cpp

#include "Becher.h"
#include <string>

void main () {
Becher b("Wasser",50,500);
b.ausgabe();
}

Jack Daniels
08.11.2008, 16:53
#include "Becher.h"
#include <string>
#include <iostream>

F1lehunt3r
08.11.2008, 17:03
#include "Becher.h"
#include <string>
#include <iostream> Meinst du in der Class.php noch <iostream> includen? Das bringt leider nichts, in der Main steht ja auch keine Ein-/Ausgabe.

noctem
08.11.2008, 18:10
Was zeigt der Compiler für eine Fehlermeldung?

blackberry
08.11.2008, 19:03
Die Reihenfolge ist falsch.
Mach erstmal:

#include <iostream>
#include <string>

using namespace std;
#include "Becher.h"

F1lehunt3r
08.11.2008, 19:56
Was zeigt der Compiler für eine Fehlermeldung? Ach verdammt, ich war so durcheinander, habe ganz vergessen die zu nennen.

\klasse\klasse\becher.cpp(16) : error C2511: 'bool Becher::reichtKapazitaet(Becher *)': Überladene Memberfunktion nicht in 'Becher' gefunden
\klasse\klasse\becher.h(5): Siehe Deklaration von 'Becher'

@BlackBerry: Das habe ich gerade ausprobiert, ändert auch nichts.

Ist bestimmt irgend ein ganz banaler Fehler. Muss mal schauen, ich glabue zu dem Buch gabs im Internet die fertigen Projekte, zu den Übungen etc.. Dann schaue ich dort auch nochmal nach.

blackberry
08.11.2008, 20:22
Ok ich hab's...
Bei Becher.h noch folgendes in die Klassendefinition aufnehmen:

bool reichtKapazitaet(Becher *);

Ausgabe:

blackberry@system:~/Desktop$ g++ Becher.cpp -c -o Becher.o; g++ Becher.o Class.cpp -o a; ./a; echo
Der Becher ist mit Wasser gefüllt.
blackberry@system:~/Desktop$

F1lehunt3r
08.11.2008, 20:29
Ok ich hab's...
Bei Becher.h noch folgendes in die Klassendefinition aufnehmen:

bool reichtKapazitaet(Becher *);Ah genial, vielen Dank. Ich wusste doch dass es wieder nur irgendetwas ganz banales sein muss. Auf die Idee einer zweiten Definition bin ich garnicht gekommen. Da davon auch nichts im Buch stand, habe ich mir gedacht, wenn ich zweimal definiere, dann macht der Compiler auch wieder Probleme.

Und von dem letzten Mal proggen vor rund zwei Jahren ist auch nicht mehr viel hängen geblieben xD