Seite 8 von 8
Re: konkrete Inhaltsfragen
Verfasst: Di 8. Dez 2009, 11:15
von King_Fuck
ja den Copy Konstruktor habe ich unter Private geschrieben:
Fahrzeug.h:
private:
Fahrzeug(const Fahrzeug&);
public:
Fahrzeug& operator=(Fahrzeug&);
Fahrzeug.cpp
Fahrzeug& Fahrzeug::operator=(Fahrzeug& fOriginal){
this->vInitialisierung();
this->p_sName = fOriginal.p_sName;
this->p_sName += "_Kopie";
this->p_dMaxGeschwindigkeit = fOriginal.p_dMaxGeschwindigkeit;
return *this;
}
Fahrzeug::Fahrzeug(const Fahrzeug& fOriginal){
p_sName = fOriginal.p_sName;
p_dMaxGeschwindigkeit = fOriginal.p_dMaxGeschwindigkeit;
}
Wie ich bereits sagte: es erscheint die Fehlermeldung:
error C2248
"Fahrzeug::Fahrzeug": kein zugriff auf private Member, dessen Deklaration in der Fahrzeug-Klasse erfolgte.
Was habe ich falsch gemacht?
Gruß
Re: konkrete Inhaltsfragen
Verfasst: Mi 9. Dez 2009, 20:04
von testuser
warum benutzt du überhaupt einen private Konstruktor? Damit verhinderst du doch jegliches instanziieren der Klasse.
Könntest du eventuell den inhalt der Fahrzeug.h datei komplett angeben?
Re: konkrete Inhaltsfragen
Verfasst: Do 10. Dez 2009, 11:53
von [MD]
testuser hat geschrieben:warum benutzt du überhaupt einen private Konstruktor? Damit verhinderst du doch jegliches instanziieren der Klasse.
Nein, er unterbindet lediglich den Copykonstruktor, was ja vollkommen ok ist:
King_Fuck hat geschrieben:ja den Copy Konstruktor habe ich unter Private geschrieben:
Fahrzeug.h:
private:
Fahrzeug(const Fahrzeug&); [...]
King_Fuck hat geschrieben:
Fahrzeug::Fahrzeug(const Fahrzeug& fOriginal){
p_sName = fOriginal.p_sName;
p_dMaxGeschwindigkeit = fOriginal.p_dMaxGeschwindigkeit;
}
Wie ich bereits sagte: es erscheint die Fehlermeldung:
error C2248
"Fahrzeug::Fahrzeug": kein zugriff auf private Member, dessen Deklaration in der Fahrzeug-Klasse erfolgte.
Was habe ich falsch gemacht?
Gruß
Was ich mich nun aber frage: Warum unterbindest Du den Copykonstruktor, implementierst ihn aber vollständig??
Zu deiner eigentlichen Frage: In welcher Datei wird der Fehler erzeugt?? (also main.cpp oder Weg.cpp, oder wo??) Eventl. machst Du dort beim erstellen einen Fehler.
testuser hat geschrieben:Könntest du eventuell den inhalt der Fahrzeug.h datei komplett angeben?
Dem kann ich mich nur anschließen, denn dann sieht man mal deine Konstruktoren.
Re: konkrete Inhaltsfragen
Verfasst: Do 10. Dez 2009, 23:06
von King_Fuck
Fahrzeug.h
Code: Alles auswählen
#pragma once
#include <iostream>
#include <string>
#include <iomanip>
#include <vector>
#include <math.h>
using namespace std;
extern double dGlobaleZeit;
class Fahrzeug{
private:
protected:
// Variablen
string p_sName;
static int p_iMaxID;
int p_iID;
double p_dMaxGeschwindigkeit;
double p_dGesamtStrecke;
double p_dGesamtZeit;
double p_dZeit;
public:
// Methoden
void vAusgabe();
void vAbfertigung();
virtual void vInitialisierung();
virtual double dGeschwindigkeit();
// überladen
ostream& ostreamAusgabe(ostream&);
bool operator<(Fahrzeug& fVergleich);
Fahrzeug& operator=(Fahrzeug&);
// Konstruktoren Destruktor
Fahrzeug();
Fahrzeug(string);
Fahrzeug(string,double);
Fahrzeug(const Fahrzeug&);
~Fahrzeug();
};
ostream& operator<<(ostream&,Fahrzeug&);
Fahrzeug.cpp
Code: Alles auswählen
#pragma once
#include "Fahrzeug.h"
int Fahrzeug::p_iMaxID=0;
// Konstruktoren Destruktor
Fahrzeug::Fahrzeug(){
vInitialisierung();
cout << "Namenloses Fahrzeug erzeugt. ID: " << p_iID << endl;
}
Fahrzeug::Fahrzeug(string Name){
vInitialisierung();
p_sName=Name;
cout << "Fahrzeug namens " << p_sName << " erzeugt. ID:" << p_iID << endl;
}
Fahrzeug::Fahrzeug(string Name, double MaxGeschwindigkeit){
vInitialisierung();
p_sName=Name;
p_dMaxGeschwindigkeit=MaxGeschwindigkeit;
cout << "Fahrzeug namens " << p_sName << " erzeugt. ID:" << p_iID << endl;
}
Fahrzeug::~Fahrzeug(){
}
// Methoden
void Fahrzeug::vInitialisierung(){
p_sName = " ";
p_iMaxID++;
p_iID=p_iMaxID;
p_dMaxGeschwindigkeit=0.0;
p_dGesamtStrecke=0.0;
p_dGesamtZeit=0.0;
p_dZeit=0.0;
}
double Fahrzeug::dGeschwindigkeit(){
return p_dMaxGeschwindigkeit;
}
void Fahrzeug::vAusgabe(){
cout.setf(ios::fixed);
cout.precision(2);
cout << resetiosflags(ios::right) << setiosflags(ios::left)
<< setw(4) << p_iID << setw(7) << p_sName
<< setw(3) << ":" << setw(9) << p_dMaxGeschwindigkeit
<< setw(15) << p_dGesamtStrecke
<< setw(9) << dGeschwindigkeit() << endl;
}
void Fahrzeug::vAbfertigung(){
if(fabs(p_dGesamtZeit)!=fabs(dGlobaleZeit)){
p_dZeit = p_dGesamtZeit;
p_dGesamtZeit = dGlobaleZeit;
p_dGesamtStrecke += dGeschwindigkeit()*(p_dGesamtZeit-p_dZeit);
}
}
ostream& Fahrzeug::ostreamAusgabe(ostream& out){
out.setf(ios::fixed);
out.precision(2);
out << resetiosflags(ios::right) << setiosflags(ios::left)
<< setw(4) << p_iID << setw(7) << p_sName
<< setw(3) << ":" << setw(9) << p_dMaxGeschwindigkeit
<< setw(15) << p_dGesamtStrecke
<< setw(9) << dGeschwindigkeit() << endl;
return out;
}
ostream& operator<<(ostream& out,Fahrzeug& fFahrzeug){
return fFahrzeug.ostreamAusgabe(out);
}
bool Fahrzeug::operator<(Fahrzeug& fVergleich){
if(this->p_dGesamtStrecke < fVergleich.p_dGesamtStrecke)
return true;
else
return false;
}
Fahrzeug& Fahrzeug::operator=(Fahrzeug& fOriginal){
vInitialisierung();
p_sName = fOriginal.p_sName;
p_sName += "_Kopie";
p_dMaxGeschwindigkeit = fOriginal.p_dMaxGeschwindigkeit;
return *this;
}
Fahrzeug::Fahrzeug(const Fahrzeug& fOriginal){
vInitialisierung();
p_sName = fOriginal.p_sName;
p_dMaxGeschwindigkeit = fOriginal.p_dMaxGeschwindigkeit;
p_sName += "_Kopie";
}
Re: konkrete Inhaltsfragen
Verfasst: Fr 11. Dez 2009, 00:56
von testuser
Also ich hab mal eben deine Fahrzeug klasse ausprobiert, und da kommt beim benutzen von "=", sowie initialisieren einfach kein Fehler. Hier mein testcode:
Code: Alles auswählen
Fahrzeug* a = new Fahrzeug("Auto1");
Fahrzeug b("Auto2");
Fahrzeug c("Auto2", 4.144);
Fahrzeug d(c);
cout << *a << endl;
cout << b << endl;
b = *a;
cout << *a << endl;
cout << b << endl;
return 0;
Re: konkrete Inhaltsfragen
Verfasst: Sa 12. Dez 2009, 00:56
von King_Fuck
Ja ok, der Fehler war dass ich Fahrzeug statisc erzeugt habe...
jetzt klappts.