Dynamisches Array in Klasse anlegen

Krikus

Mitglied
Hi,

ich habe eine Controllerklasse "Kundenverwaltung" und eine Klasse "Kunde"
Über diese Controllerklasse möchte ich nun über eine Methode "kunden_anlegen" ein neues Kundenobjekt anlegen. Dazu will ich eine dynamisches Array erzeugen, welches einfach imemr eins hochzählt bei einem neuen Kunden. Allerdings bekomme ich folgende Fehlermeldung:

'kunde::kunde(const kunde &)' : cannot convert parameter 1 from 'int' to 'const kunde &'

Hier einmal der Code:


C++:
class kundenverwaltung  
{

private:

	kunde *kundenarray;
	int size;


public:

 
kundenverwaltung();
~kundenverwaltung();
void kunde_einloggen();
 void kunde_ausloggen();
 void kunde_anlegen();

};

kundenverwaltung::kundenverwaltung():size(0)
{
}
/*
~kundenverwaltung()
{
	delete [] kundenarray;
}*/
void kundenverwaltung::kunde_einloggen()
{
	string mail;
	int pw;
	cout << "Bitten geben Sie Ihre E-mail ein: " <<endl;
	cin >> mail;
	cout <<"Bitte geben Sie Ihr Passwort ein: " <<endl;
	cin >> pw;

}
void kundenverwaltung::kunde_ausloggen()
{
	
}
void kundenverwaltung::kunde_anlegen()
{
	kundenarray = new kunde(size++);
	
}
 
Hi.
C++:
void kundenverwaltung::kunde_anlegen()
{
	kundenarray = new kunde(size++);
}
Ein Array wird mit dem new[] Operator angelegt. Du erzeugst hier eine neue Instanz von kunde und versuchst den Konstruktor kunde::kunde(int) aufzurufen.

Selbst wenn du den richtigen Operator verwenden würdest, würdest du damit ein neues Array anlegen, das alte überschreiben und somit ein Speicherleck produzieren. Desweiteren hättest du dann immer noch keinen Kunden erzeugt.

Warum nimmst du nicht einfach einen std::vector<kunde>?

Gruß
 
Danke für die Antwort.
Die Sache mit dem Vektor ist mir garnicht in den Sinn gekommen.

Allerdigns bekomme ich da den selben Fehler.
Hab irgendwie nen Brett vorm Kopf.


C++:
....
private:
vector <kunde>kundenarray;
....

void kundenverwaltung::kunde_anlegen()
{

	kunde *newobjekt = new kunde;
	kundenarray.push_back(newobjekt);
	cout <<"Kunde wurde angelegt!"<<endl;
	
}
 
Ich glaub ich hab nen Fehler in meiner Denkweise.

Für jeden Kunden erzeuge ich eine neues Kundenobjekt, welches ich als Zeiger in dem Vector speicher will.
Somit hätte ich dann im Vector viele Zeiger stehen und jeder Zeiger zeigt auf ein Kundenobject -> ein Kunde
 
Ich glaub ich hab nen Fehler in meiner Denkweise.

Für jeden Kunden erzeuge ich eine neues Kundenobjekt, welches ich als Zeiger in dem Vector speicher will.
Somit hätte ich dann im Vector viele Zeiger stehen und jeder Zeiger zeigt auf ein Kundenobject -> ein Kunde
Wozu willst du dafür unbedingt Zeiger verwenden? Benötigst du Polymorphie?

Gruß
 
Polymorphie brauch ich keine.
In einer ähnlichen Aufgabe habe ich es so gemacht, allerdings mit statischen Arrays.

Jetzt mit dynamisch bekomme ich das nicht auf die Reihe.
Wenn alles nichts hilft, dann leg ich mir wieder ein festes Array mit 100 Kundenobjekten an und arbeite so erstmal weiter.
 
Polymorphie brauch ich keine.
In einer ähnlichen Aufgabe habe ich es so gemacht, allerdings mit statischen Arrays.

Jetzt mit dynamisch bekomme ich das nicht auf die Reihe.
Wenn alles nichts hilft, dann leg ich mir wieder ein festes Array mit 100 Kundenobjekten an und arbeite so erstmal weiter.
C++:
void kundenverwaltung::kunde_anlegen()
{
    kundenarray.push_back(kunde());
    cout <<"Kunde wurde angelegt!"<<endl;   
}
Gruß
 
So meckert der compiler nicht mir, Allerdings bekomme ich nun beim ausführen der Methode eine Zugriffsverletzung.

"Access violation reading location 0xccccccd8."

welche sich auf folgende Methode der Klasse vector bezieht:

C++:
size_type size() const
		{	// return length of sequence
		return (_Mylast - _Myfirst);
		}
 
So meckert der compiler nicht mir, Allerdings bekomme ich nun beim ausführen der Methode eine Zugriffsverletzung.

"Access violation reading location 0xccccccd8."

welche sich auf folgende Methode der Klasse vector bezieht:

C++:
size_type size() const
		{	// return length of sequence
		return (_Mylast - _Myfirst);
		}
Der Fehler liegt an der Stelle wo du die size() Methode aufgerufen hast.

Gruß
 
Zurück