konkrete Inhaltsfragen

Moderator: Moderatoren

King_Fuck
Beiträge: 109
Registriert: Do 26. Nov 2009, 11:12

Re: konkrete Inhaltsfragen

Beitrag von King_Fuck » Di 8. Dez 2009, 11:15

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ß

testuser
Beiträge: 180
Registriert: Mi 25. Jun 2008, 18:47

Re: konkrete Inhaltsfragen

Beitrag von testuser » Mi 9. Dez 2009, 20:04

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?
Мои пять копеек

Benutzeravatar
[MD]
Beiträge: 389
Registriert: Mi 16. Apr 2008, 14:26

Re: konkrete Inhaltsfragen

Beitrag von [MD] » Do 10. Dez 2009, 11:53

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.
Ciao [MD]

King_Fuck
Beiträge: 109
Registriert: Do 26. Nov 2009, 11:12

Re: konkrete Inhaltsfragen

Beitrag von King_Fuck » Do 10. Dez 2009, 23:06

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";
}

testuser
Beiträge: 180
Registriert: Mi 25. Jun 2008, 18:47

Re: konkrete Inhaltsfragen

Beitrag von testuser » Fr 11. Dez 2009, 00:56

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;
Мои пять копеек

King_Fuck
Beiträge: 109
Registriert: Do 26. Nov 2009, 11:12

Re: konkrete Inhaltsfragen

Beitrag von King_Fuck » Sa 12. Dez 2009, 00:56

Ja ok, der Fehler war dass ich Fahrzeug statisc erzeugt habe...
jetzt klappts.

Antworten

Zurück zu „Praktikum Informatik II“