C++ Anfänger
-
Hallo,
Ich habe ganz frisch mit c(pp) angefangen und bin mir noch nicht ganz im klaren, ob dies meine sprache ist. bisher habe ich immer mit php entwickelt.nun habe ich ein wenig probiert,
#include<iostream> using namespace std; int add(int,int); class foo { public: // Contructor ! foo() { this->print("Contructor gestartet!"); int this->second(5); } void print(string str) { cout<<str<<endl; } void add(int first) { this->print(this->second + first); } }; int main() { foo = new foo; foo->add(2); foo->add(2); string test; cin>>test; }Leider habe ich irgendwo einen fehler, ich glaube es hängt mit der sichtbarkein der variablen zusammen, von php bin ich gewöhnt mit this klassenintern und funktionsübergreifend arbeiten kann.
dev-c++ spuckt hier den fehler aus:
int this->second(5);wäre super wenn ihr einmal drüber gucken könntet und mir sagen könntet wo mein fehler ist ...
danke, tim
-
Das int gehört da nicht davor

Deklarationen von Membervariablen haben im Konstruktor nichts zu suchen (lediglich die Initialisierung derer).class foo { public: // Contructor ! int second; foo() { print("Contructor gestartet!"); second=5; } };Alternativ die Initialisierungsliste nutzen (was in der Regel vorzuziehen ist):
foo() : second(5) { print("Contructor gestartet!"); }this-> ist in C++ übrigens überflüssig. Alle Membervariablen sind innerhalb der Memberfunktionen von Natur aus sichtbar.
-
Füg in Zeile 8 mal ein "int second;" ein.
Dann änder Zeile 13 in "second=5;".
Und das ständige "this->" ist zwar nicht falsch, aber meistens überflüssig
-
#include <iostream> #include <string> // für den std::string-Typ using namespace std; // int add(int,int); unnötig, da die Funktion nirgends definiert wird class foo { public: foo() { //this->print("Contructor gestartet!"); unnötig print("Constructor gestartet!"); //int this->second(5); ungültige Syntax second = 5; // hier mit Wert initialisieren, besser die Initialisierungsliste verwenden } private: int second; // Hier die Membervariable definieren public: void print(string str) { cout<<str<<endl; } void add(int first) { //this->print(this->second + first); unnötig und ungültig cout << (second + first) << endl; // wenn du eine Zahl mit einer Funktion ausgeben willst, dann muss diese auch eine Zahl als Parameter nehmen und keinen String, also "void print(int zahl)" } }; int main() { //foo = new foo; unnötig und ungültig foo bar; // Klasse und Objekt können nicht den selben Namen haben // alternativ "foo* bar = new foo;", aber dann musst du das Objekt auch wieder löschen //foo->add(2); ungültig //foo->add(2); bar.add(2); // oder "bar->add(2);", wenn du mit Zeigern arbeitest bar.add(2); // "delete bar;" falls du die Variante mit new gewählt hast string test; // wenn das dafür da ist, wofür ich denke, dass es da ist, dann lies mal den FAQ-Artikel "Automatisches Schließen der Konsole verhindern" cin>>test; }