Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

06.01.2009, 20:24

Problem mit listen und new/delet

Hallo,
ich sitze gerade irgendwie auf dem Schlauch.

Also ich hab das hier

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(Auswahl==1)
    {
       
        cout<<"Anzahl: "<<endl;
        cin>>Anzahl;

        for (int a=0;a<Anzahl;a++)
        {
            Temp = new CKunde (a+1);
            Temp[a]->m_Eintrag ();
            lKundenDaten.push_back (Temp);
            
    
        }

      }



Und leider das hier

Zitat

1>d:\porgrammieren\übungsprogramme\kundenverwaltung-umgebung\cpp\main.cpp(62) : error C2664: 'CKunde::CKunde(const CKunde &)': Konvertierung des Parameters 1 von 'int' in 'const CKunde &' nicht möglich
1> Ursache: Konvertierung von 'int' in 'const CKunde' nicht möglich
1> Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
1>d:\porgrammieren\übungsprogramme\kundenverwaltung-umgebung\cpp\main.cpp(63) : error C2819: Der Typ 'CKunde' hat keinen überladenen Elementoperator '->'
1> d:\porgrammieren\übungsprogramme\kundenverwaltung-umgebung\header\kunde.h(16): Siehe Deklaration von 'CKunde'
1> Wollten Sie stattdessen '.' verwenden?
1>d:\porgrammieren\übungsprogramme\kundenverwaltung-umgebung\cpp\main.cpp(63) : error C2232: '->CKunde::m_Eintrag': Der linke Operand ist vom Typ 'class', verwenden Sie '.'
1>Code wird generiert...
1>Das Buildprotokoll wurde unter "file://d:\Porgrammieren\Übungsprogramme\Kundenverwaltung-Umgebung\Kundenverwaltung-Umgebung\Debug\BuildLog.htm" gespeichert.
1>Kundenverwaltung-Umgebung - 3 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========


Ich hatte vorhin schon ein großes Problen konnte es aber selber lösen.
Jetzt heng ich hier fest.

Das ist bestimmt wieder was ganz einfaches aber ich komm nicht drauf.
Das ist nur eine etwas abgewandelte Form aus dem Buch.

2

06.01.2009, 20:27

C-/C++-Quelltext

1
2
            Temp = new CKunde  [a+1]; 
//(mit (  ) rufst du den Konstruktor auf)
Lieber dumm fragen, als dumm bleiben!

3

06.01.2009, 21:55

Und wenn er [] nutzt erstellt er ca. (a+1)/2 Elemente. Ich denke nicht, dass das gewollt ist. Das sieht ein wenig verkorkst aus. Man sollte das Temp = new CKunde vor die Schleife ziehen und ein Temp = new CKunde[a+1] daraus machen.
Zur Zeit erstellt er ein Array, ruft eine Funktion des letzten Elementes auf und legt das dann in einer Liste(?) ab.

Zitat

1>d:\porgrammieren\übungsprogramme\kundenverwaltung-umgebung\cpp\main.cpp(63) : error C2819: Der Typ 'CKunde' hat keinen überladenen Elementoperator '->'
1> d:\porgrammieren\übungsprogramme\kundenverwaltung-umgebung\header\kunde.h(16): Siehe Deklaration von 'CKunde'
1> Wollten Sie stattdessen '.' verwenden?
1>d:\porgrammieren\übungsprogramme\kundenverwaltung-umgebung\cpp\main.cpp(63) : error C2232: '->CKunde::m_Eintrag': Der linke Operand ist vom Typ 'class', verwenden Sie '.'

Was sagen dir die hervorgehobenen Meldungen?

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

4

07.01.2009, 00:19

Wieso einen Punktoperator?Die Instanz ist doch ein Zeiger also muss ich doch -> verwenden ?!

edit: Ja jetzt geht es.Aber mir ist nicht klar wieso.

5

07.01.2009, 04:24

Die Dereferenzierung geschieht schon durch [] und muss daher nicht noch über -> gemacht werden. Daher der Punkt.

Werbeanzeige