Gestörtes Verhältnis zu Konstruktoren

Gestörtes Verhältnis zu Konstruktoren

Beitragvon Cashdogg » 10.07.2010 15:18

Also meine großen Probleme hab ich immer noch mit den Konstruktoren in Klassen. Hab hier mal ein Beispiel aus ner alten Klausur:

Code: Alles auswählen
#include <iostream>

using namespace std;

class tacho
{
private:
   double Strecke;
   double Zeit;   
public:
   tacho(double, double);
   tacho operator+=(tacho);
   double get_dist();
   friend double avg_speed(tacho);
};

tacho::tacho(double s, double t)
{
   Strecke=s;
   Zeit=t;
}

tacho tacho::operator+=(tacho op2)
{
   tacho erg;

   erg.Strecke+=op2.Strecke;
   erg.Zeit+=op2.Zeit;

   return erg;
}

double tacho::get_dist()
{
   return Strecke;
}

double avg_speed(tacho trip)
{
   return (trip.Strecke/trip.Zeit);
}

int main()
{
   tacho trip (0,0);
   trip+=tacho(200, 413.5);
   trip+=tacho(547.5, 800.3);
   trip+=tacho(2000,415);

   cout << "Gesamtstrecke: " << trip.get_dist() << endl;
   cout << "Durchschnitt: " << avg_speed(trip) << endl;
}


Mein Compiler meckert aber immer, dass " Kein geeigneter Standardkonstruktor verfügbar" sei. Wenn ich nun bei der Initialisierung des Konstruktors oben (double s=0, double t=0) eingeben, dann bekomm ich das Programm zwar zum Laufen, aber es liefet mir für die Gesamtsstrecke den Wert Null.
Cashdogg
 
Beiträge: 408
Registriert: 20.12.2008 15:05

Re: Gestörtes Verhältnis zu Konstruktoren

Beitragvon Cashdogg » 10.07.2010 16:17

Hmm ich kann meine Frage mal wiede selber bantworten:
Da ich in den Methoden die Dekleration z.B. tacho erg verwende, benötige ich dafür natürlich auch einen entsprechenden Konstruktor ohne Paramter. Den würde ich in der Klasse mit tacho(){}, deklarieren, das funktioniert so auch, aber warum kann ich ihn außerhalb nicht mir tacho::tacho(){}, deklarieren?

Gruß Cashdogg
Cashdogg
 
Beiträge: 408
Registriert: 20.12.2008 15:05

Re: Gestörtes Verhältnis zu Konstruktoren

Beitragvon mabl » 11.07.2010 09:04

Cashdogg hat geschrieben:[u] Den würde ich in der Klasse mit tacho(){}, deklarieren, das funktioniert so auch, aber warum kann ich ihn außerhalb nicht mir tacho::tacho(){}, deklarieren?


Das sollte tun, du musst ihn dann aber auch in der Klasse definieren:
Code: Alles auswählen
class tacho
{
public:
...
   tacho();
   tacho(double, double);
...
};

tacho::tacho(){
}

...
Benutzeravatar
mabl
Site Admin
 
Beiträge: 741
Registriert: 25.10.2008 11:28
Wohnort: Ettlingen, Karlsruhe


Zurück zu Programmieren

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron