Probleme bei Klassendefinition

Rene42

Erfahrenes Mitglied
Code:
#include <iostream>

using namespace std;

class Liste {

  public:

  string Listenname;

  Liste()
  {

      Listenname = "Testliste";

  }

};

int main()
{

    Liste MeineListe();
-->    string Wert = MeineListe.Listenname(); <--

    cout << Wert << endl;
    return 0;
}

Blöde Frage aber der Compiler zeigt in der markierten Zeile an das er Listenname in Liste nicht finden kann. Was habe ich falsch gemacht?
 
Hi

drei Fehler, den Schwierigsten zuerst:

a)
Liste MeineListe();
Du willst ein Objekt von Liste, und dem Konstruktor werden keine Parameter übergeben. Man könnte die selbe Zeile aber auch als Funktionsdefinition verstehen (Funktion MeineListe, Returntyp Liste, kein Parameter). Und wenn etwas als Funktionsdefinition verstehbar ist hat das in C++ per Definition Vorrang ... damit ist MeineListe innerhalb vom Main also kein Klassenobjekt mehr (sondern eine Funktion), und damit gibt es keine Member, die mit dem Punkt angesprochen werden können. (Dass die Funktion keinen "Inhalt" hat stört zu dem Zeitpunkt noch nicht, das würde erst später kommen wenn der Teil, fehlerfrei durchgeht)

Eine Möglichkeit wäre, einfach die runden Klammer zu entfernen.

Btw., das passiert nicht, wenn der Konstruktor Parameter hat und man was übergibt
Liste MeineListe(1, 2, 3); kann keine Funktion sein, daher keine Probleme mit der Klammer
(nur Liste MeineListe(int a, int b, int c)); wäre eine Funktion)

Die hunderttausend verschiedenen Möglichkeiten, wie ein Klassenobjekt angelegt werden kann, haben einen guten Platz in der (meiner) Liste der verwirrensten C++-Features. Mit oder ohne Klammer, runde Klammern oder Braces, normale Parameter oder Initliste oder Aggregat, POD oder nicht, verschiedenes Verhalten in verschiedenen Standardversionen...

Was ich eigentlich nur sagen will, das ist sicher keine blöde Frage, ganz im Gegenteil :)

b)
MeineListe.Listenname(); wäre richtig, wenn Listenname eine
Funktion/Methode ist, die man aufrufen will. Weg mit den Klammern, dann passt das.

c)
Es fehlt #include<string>
 
Zuletzt bearbeitet:
Vielen Dank für die ausführliche Erklärung damit konnte ich doch was anfangen....Der Umstieg von VB.Net fällt durchaus schwer. Die Klammern (eckig, rund, geschweift), und Zeichen (Doppelpunkte, Punkte, Klammern, Semikolons) sind doch in C++ deutlich ausgeprägter als in Visual Basic.
 
Zurück