c++ this-zeiger als Parameter

H

henie

Hallo zusammen,

ich bin relativ neu in C++ und habe ein Problem mit dem this-zeiger, womit ich nicht weiterkomme.
Ich habe zwei Klassen, A und B. A hat eine Methode in der ein Objekt der Klasse B erzeugt wird
und auf dem dann einige Methoden aufgerufen werden. Nun ist es so, dass die Methoden von Klasse B
teilweise wieder welche von Klasse A aufrufen sollen. Meine Idee war nun, dem Konstruktor von B
einen Zeiger auf das A-Objekt zu übergeben. Nur irgendwie klappt das alles nicht so ganz.

Kann mir da vlt. jemach helfen und mir sagen wie das aussehen muss?

Gruß,
henie
 
Hi.

Also erstmal scheint deine Klassenhierarchie fragwürdig zu sein. Solche zyklischen Abhängigkeiten weisen meistens auf Designfehler hin.

Und was meinst du mit "es klappt nicht so ganz"? Zeige den Code (in Minimalform!) und die Fehlermeldungen.

Gruß
 
Das mit dem Design hab ich mir auch schon überlegt, mir ist allerdings noch nichts vernünftiges eingefallen...

Also ich habe diese Methode in der Klasse PhysicWorld wo eine Instanz von Border erzeugt werden soll:
Code:
void PhysicWorld::createBorders(bool top, bool bottom,bool left, bool right){
	Border border(windowWidth,windowHeight,this);
        .....

Der Konstruktor von Border sind so aus:
Code:
Border::Border(int _windowWidth, int _windowHeight,PhysicWorld* physicWorld) {...}

Und dieses ist der Fehler:
Code:
..\source\box2d\../../header/Border.h: At global scope:
..\source\box2d\../../header/Border.h:21: error: `PhysicWorld' has not been declared
..\source\box2d\../../header/Border.h:21: error: ISO C++ forbids declaration of `physicWorld' with no type
..\source\box2d\PhysicWorld.cpp: In member function `void PhysicWorld::createBorders(bool, bool, bool, bool)':
..\source\box2d\PhysicWorld.cpp:44: error: no matching function for call to `Border::Border(int&, int&, PhysicWorld* const)'
..\source\box2d\../../header/Border.h:14: note: candidates are: Border::Border(const Border&)
..\source\box2d\../../header/Border.h:21: note:                 Border::Border(int, int, int*)
 
Und dieses ist der Fehler:
Code:
..\source\box2d\../../header/Border.h: At global scope:
..\source\box2d\../../header/Border.h:21: error: `PhysicWorld' has not been declared
..\source\box2d\../../header/Border.h:21: error: ISO C++ forbids declaration of `physicWorld' with no type
..\source\box2d\PhysicWorld.cpp: In member function `void PhysicWorld::createBorders(bool, bool, bool, bool)':
..\source\box2d\PhysicWorld.cpp:44: error: no matching function for call to `Border::Border(int&, int&, PhysicWorld* const)'
..\source\box2d\../../header/Border.h:14: note: candidates are: Border::Border(const Border&)
..\source\box2d\../../header/Border.h:21: note:                 Border::Border(int, int, int*)
Und hast du denn mal die Fehlermeldung gelesen? Du hast den Typ PhysicsWorld nicht deklariert.

Die Headerdateien sollten so aussehen, daß in jedem Fall zumindest die Klassen deklariert werden.
C++:
#ifdef PHYSICS_WORLD_HPP

class PhysicsWorld;

#else
#  define PHYSICS_WORLD_HPP
class PhysicsWorld {

  // ...
};
#endif
Gruß
 
Zuletzt bearbeitet:
Konkret sind meine Headerdatei so aus:

Code:
#ifndef PHYSICWORLD_H_
#define PHYSICWORLD_H_

#include <Box2D.h>
#include <iostream.h>
#include "Border.h"

class PhysicWorld {

private:
	int windowWidth;
	int windowHeight;
	float32 timeStep;
	int32 iterations;
	b2AABB m_worldAABB;
	b2World* m_world;
	b2Body* boundaries;

public:
	PhysicWorld(int windowWidth, int windowHeight);
	virtual ~PhysicWorld();
	void step();
	b2World* getWorld();
	b2Body *createBody(b2BodyDef & groundBodyDef);
};

#endif /* PHYSICWORLD_H_ */
 
Jetzt hab ich es hinbekommen, ich bin mir zwar nich so ganz sicher warum,
aber jetzt klappt es.
 
Zurück