Probleme mit dem "->" Operator
-
ColeZero schrieb:
Wird das nicht hier gemacht?:
Teil2 *MyTeil2; //Hab ich mich verschrieben meine natürlich die Klasse CCamera, also CCamera *Cameradu hast einen zeiger auf einen objekt vom typ Teil2...aber wo ist das passende objekt? Wo zeigt der zeiger hin? wo ist das ziel?
-
Wird das nicht hier gemacht?:
Nein, hier legst du eine Variable vom Typ Zeiger auf CCamera an und keine CCamera. Warum brauchst du überhaupt einen Zeiger, tuts kein normales Objekt?
Camera cam;Tuts das nicht? Wenn nicht, dann Konstruktor:
Camera* cam; ... Game::Game () : cam(new Camera()) // Initialisiere den Zeiger auf cam mit einer neuen Kamera // Damit die auch über die Methoden als Nicht-Member-Variable da bleibt müssen wir sie mit new am Heap anlegen { } Game::~Game () { // Was wir mit new am Heap anlegen muss auch wieder freigegeben werden delete cam; }BTW: Wie du siehst hab ich die ganzen C vor den Klassennamen gekillt, solltest du auch tun.
MfG SideWinder
-
Vielen Dank
Hast recht ich hab die C entfernt, nerven ein wenig..^^
Vorallendingen wenn ich jetzt eine Datei suche,bzw. den Anfangbuchstaben suche, werden nicht gleich alle Dateien angezeigt.
-
Tuts das nicht? Wenn nicht, dann Konstruktor:
C/C++ Code:
Camera* cam;...
Game::Game ()
:
cam(new Camera()) // Initialisiere den Zeiger auf cam mit einer neuen Kamera
// Damit die auch über die Methoden als Nicht-Member-Variable da bleibt müssen wir sie mit new am Heap anlegen
{
}Game::~Game ()
{
// Was wir mit new am Heap anlegen muss auch wieder freigegeben werden
delete cam;
}
C/C++ Code:
Camera* cam;...
Game::Game ()
:
cam(new Camera()) // Initialisiere den Zeiger auf cam mit einer neuen Kamera
// Damit die auch über die Methoden als Nicht-Member-Variable da bleibt müssen wir sie mit new am Heap anlegen
{
}Game::~Game ()
{
// Was wir mit new am Heap anlegen muss auch wieder freigegeben werden
delete cam;
}
C/C++ Code:
Camera* cam;...
Game::Game ()
:
cam(new Camera()) // Initialisiere den Zeiger auf cam mit einer neuen Kamera
// Damit die auch über die Methoden als Nicht-Member-Variable da bleibt müssen wir sie mit new am Heap anlegen
{
}Game::~Game ()
{
// Was wir mit new am Heap anlegen muss auch wieder freigegeben werden
delete cam;
}Funktioniert auch nicht den jetzt meint er bei (new Camera()), dass er keinen geeigneten Standartkonstruktor findet.
p.s nebenbei:
Wenn ich ein normales Object anlege um es z.b in einer Methode einer Klasse zuverwenden, will es aber in einer weiteren Methode der selben Klasse nutzen, muss ich es dann nochmal instanzieren??
Beispiel:
class Test { public: void Hallo(); void Bye(); };[code]
void Test::Hallo()
{
Meet MyMeet;
MyMeet.Treffen();
}void Test::Bye()
{
MyMeet.GoodBye();
//Hier kennt er ja das MyMeet nicht mehr.
}
-
Offenbar hat deine Camera-Klasse verschiedene Konstruktoren, statt () kommt da dann halt eben (vector,vector,vector) oder was auch immer hin. Ein passender Konstruktor halt, so als würdest du das Objekt ganz normal erstellen, da musst du Camera ja auch was übergeben:
Camera cam; // funktioniert ja dann auch nicht, musst ja auch: Camera cam(hier_was_rein); // schreibenMfG SideWinder
-
Oh ja seh ich auch grad ich DEpp

-
So richtig funktionieren tuts immer noch nicht..dann lass ich das eben und erstelle normale Objecte.
DOch da ergibt sich folgendes Problem, welches ich ja mit der eben versuchten Methode nicht ergeben hat.Wenn ich ein normales Object anlege um es z.b in einer Methode einer Klasse zuverwenden, will es aber in einer weiteren Methode der selben Klasse nutzen, muss ich es dann nochmal instanzieren??
Beispiel:
class Test { public: void Hallo(); void Bye(); };void Test::Hallo() { Meet MyMeet; MyMeet.Treffen(); } void Test::Bye() { MyMeet.GoodBye(); //Hier kennt er ja das MyMeet nicht mehr. }
-
Wenn du das machen willst dann muss MyMeet als member in die Klasse.
class Test{ public: void Hallo(); void Bye(); protected: Meet MyMeet; }; void Test::Hallo(){ MyMeet.Treffen(); } void Test::Bye(){ MyMeet.GoodBye(); }Kurt
-
Nimm meinen Rat und ließ dir mal ein gutes Tutorial zum Thema Klassen durch zB hier: http://tutorial.schornboeck.net
oder auch Volkards Tutorial auf http://www.volkard.deMfG SideWinder
-
Wenn du das machen willst dann muss MyMeet als member in die Klasse.
C/C++ Code:
class Test{
public:
void Hallo();
void Bye();
protected:
Meet MyMeet;
};void Test::Hallo(){
MyMeet.Treffen();
}void Test::Bye(){
MyMeet.GoodBye();
}Kurt
Und was ist wenn die Klasse keinen Standartkonstr. verwendet?
Sondern einen parameterabhänigen Eigenkonstr.?
Also z.B.: Meet MyMeet(i,a);
-
Dann würd ichs so machen
class Test{ public: Test() { MyMeet = new Meet( 12, "a" ); } virtual ~Test() { delete MyMeet; } void Hallo(); void Bye(); protected: Meet * MyMeet; }; void Test::Hallo(){ MyMeet->Treffen(); } void Test::Bye(){ MyMeet->GoodBye(); }oder auch
class Test{ public: Test( int x, const char * a ): MyMeet( x, a ){ } Test(): MyMeet( 0, "" ){ } void Hallo(); void Bye(); protected: Meet MyMeet; }; void Test::Hallo(){ MyMeet.Treffen(); } void Test::Bye(){ MyMeet.GoodBye(); }Kurt
-
Dann würd ichs so machen
C/C++ Code:
class Test{
public:
Test() { MyMeet = new Meet( 12, "a" ); }
virtual ~Test() { delete MyMeet; }
void Hallo();
void Bye();
protected:
Meet * MyMeet;
};void Test::Hallo(){
MyMeet->Treffen();
}void Test::Bye(){
MyMeet->GoodBye();
}Führt leider zum absturz des Programms.

-
Cyphy schrieb:
Führt leider zum absturz des Programms.

Wann das so ist dann ist in der Klasse Meet der Wurm drin.
Kurt