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ß
konkrete Inhaltsfragen
Moderator: Moderatoren
Re: konkrete Inhaltsfragen
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?
Könntest du eventuell den inhalt der Fahrzeug.h datei komplett angeben?
Мои пять копеек
Re: konkrete Inhaltsfragen
Nein, er unterbindet lediglich den Copykonstruktor, was ja vollkommen ok ist:testuser hat geschrieben:warum benutzt du überhaupt einen private Konstruktor? Damit verhinderst du doch jegliches instanziieren der Klasse.
King_Fuck hat geschrieben:ja den Copy Konstruktor habe ich unter Private geschrieben:
Fahrzeug.h:
private:
Fahrzeug(const Fahrzeug&); [...]
Was ich mich nun aber frage: Warum unterbindest Du den Copykonstruktor, implementierst ihn aber vollständig??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ß
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.
Dem kann ich mich nur anschließen, denn dann sieht man mal deine Konstruktoren.testuser hat geschrieben:Könntest du eventuell den inhalt der Fahrzeug.h datei komplett angeben?
Ciao [MD]
Re: konkrete Inhaltsfragen
Fahrzeug.h
Fahrzeug.cpp
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&);
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
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
Ja ok, der Fehler war dass ich Fahrzeug statisc erzeugt habe...
jetzt klappts.
jetzt klappts.