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

MannyDasMammut

Treue Seele

  • »MannyDasMammut« ist der Autor dieses Themas

Beiträge: 76

Wohnort: Baden - Würtemberg / Achern

Beruf: Schüler

  • Private Nachricht senden

1

10.03.2004, 07:04

Problem mit Zeiger auf Objekte

Also ich habe mir eine Basisklasse für 3D Objekte geschrieben in ihr werden Informationen wie Positionsvektor , Rotationsvektor , Scalierungsvektor gespeichert sowie einige virtuelle Methoden wie. z.b.

Create
Initialize
Render
FrameMove

Die Klasse hat den Namen C3DObject

Des weiteren habe ich eine davon abgeleitete Klasse CWater.

In der Klasse CWater sind Informationen gespeichert die nur für diesen Objekttyp gelten. Warum ich das mit der Basisklasse gemacht hab ist klar so kann ich die verschiedenen 3D Objekte in einer Liste verknüpfen und benötige nicht für jedes Objekt eine eigene Liste.

Nun zu meinem Problem:

Mein Problem ist das folgende in der Klasse CWater gibt es einen Float Wert m_fX welcher kontinuihrlich um 0.01 erhöht wird.

Nun habe ich in meiner Hauptklasse ein Objekt vom Typ C3DObject* m_cTestObj welches ich in der InitObject Methode wie folg setze

m_cTestObj = new CWater();

m_cTestObj->Create(...);
m_cTestObj->Initialize(...);

Dann habe ich in der Render Methode der Main Klasse noch folgendes stehen:

m_cTestObj->Render();

Und in der Frame Move welche einmal pro Rendervorgang aufgerufen wird volgendes:

m_cTestObj->FrameMove();


Auf diese Weiße verändert sich jedoch der Wert in m_fX nicht. er bleibt immer gleich.

Wenn ich das Objekt aber mit einer Adresse eines Globalen CWater Objekts belege Funktioniert alles Prächtig.

m_cTestObj = &m_cWater;


Hoffentlich kann mir einer Helfern
Werde ich hier eigentlich noch gebrauch ansonsten würd ich gerne nach Hause gehen und meine graue Wand anstarren.

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

2

10.03.2004, 08:51

8)
Hab kurz ein kleines Programm geschrieben das eigentlich das gleiche machen sollte. Hier kanns mal den Code ansehen.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <Windows.h>

//Klassendeklarationen
class CObject
{
public:
    virtual void Move() {};
};

class CWater : public CObject
{
private:
    float   m_fX;
public:
    CWater();
    virtual void Move() ;
};

//*Definitionen
CWater::CWater()
{
    this->m_fX = 0.0;
}
void CWater::Move()
{
    m_fX += 0.01f;
}

//Mainfunktion
void main()
{
    CObject* Test = new CWater();
    

    for(int i = 0; i < 10000; i++)
        Test->Move();

    CWater* W = (CWater*)Test;
    //Das W Objekt hat hier den korrekten Floatwert
}

Dieser Code funzt perfekt. Vielleicht hast ja vergessen eine typecast zu machen, denn wenn du die Floatvariable erst in CWater deklariert hast kennt der Typ CObject diese Variable ja noch nicht. Schau dir diesen Code einfach mal an. Vielleicht kommst du ja auf den Fehler.

Anonymous

unregistriert

3

10.03.2004, 21:39

@Phil_GDM du hast nicht wirklich nen c buch in der Hand gehabt oder? :ohoh:
Da steht bei Vererbung: Wenn du eine Klasse ableitest und eine Funktion ändern willst MUSST du dem Compiler sagen, dass die Funktion der ursprünglichen Klasse geändert wird. Das macht man mit dem Schlüsselwort: virtual
Ergo schreib in deiner Klasse C3DObjekt vor die Funktion MoveFrame(); ein virtual und es wird klappen.
PS: kleiner Tipp mir hat ein c++ Buch am Anfang sehr geholfen.
PPS: sorry falls ich dich verärgert habe.

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

4

11.03.2004, 11:17

Ich soll in meiner Klasse virtual schreiben?!?!?!?!.
Da steht doch schon virtual. Oder willst du mir irgendwas anderes damit sagen ?!?!?!?!?
PS: Ich hab schon einige C++ Bücher gelesen.

Anonymous

unregistriert

5

11.03.2004, 14:08

FETT SORRY habe die Namen verwechselt.(liegt woll daran das ich bis 23.00 winapi geprogt habe.)
Ich krieche ja schon zu kreuze es war MannyDasMammut gerichtet.
Dein quelltext ist ja auch komplett richtig.
(ich sollte mal früher ins Bett gehen ;) )

Werbeanzeige