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

SullY

Treue Seele

  • »SullY« ist der Autor dieses Themas

Beiträge: 103

Wohnort: Vor dem PC :P

Beruf: Schulbankdrücker, Samstagsprospektzeitungsjunge,

  • Private Nachricht senden

1

15.12.2012, 13:08

C++ Functionspointer benutzt geschützte Membervariabeln

Ich arbeite/überarbeite an/meine Engine. Ich habe nun eine Klasse CEngine die Functionen wie InitD3D, CleanUP und Render besitzt.
Nun habe ich die Render funktion als Functionszeiger definiert. Die Funktion muss aber auf einige Membervariabeln zugreifen die als private definiert sind.
Nun habe ich das Problem das meine IDE und der Compiler streiken.
Hier ist der Code:

Die Klasse

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "Cookie.h"


class CEngine
{
private:
    //HWND *m_hWnd;
    LPDIRECT3D9 m_pD3D;
    LPDIRECT3DDEVICE9 m_pD3DD;
    

protected:
public:

            CEngine(LPDIRECT3D9 , LPDIRECT3DDEVICE9 );

            ~CEngine();

    LRESULT InitD3D( HWND f_hWnd );
    VOID (*Render) ();
    VOID CleanD3D();
}


In der Funktion ( WinMain ) wird dann eine Instanz mit dem Namen Engine definiert.

C-/C++-Quelltext

1
CEngine Engine( g_pD3D, g_pD3DDEVICE );


Nun möchte ich die Renderfunktion definieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
VOID FRender()
{
     Engine.m_pD3DD->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255),  1.0f, 0);
     if( Engine.m_pD3DD->BeginScene()
     {
// Hier kommt das was rein kommen soll, render usw.

     }
     Engine.m_pD3DD->EndScene();
     Engine.m_pD3DD->Present( NULL, NULL, NULL, NULL );
}


Ich nutze Funktionszeiger da ich die Engine-DLL später nicht verändern will, zudem will ich die Renderfunktion als Methode der Klasse CEngine verwenden.
Ich bin hier mit meinem Latein schon leider am Ende.
Hoffentlich gibt's eine Lösung für das Problem ...

Gruß SullY :vain:

EDIT: Das Problem ist die IDE die Membervariabeln plötzlich nicht kennt :\
Spruch Lädt... 99 % . Verbindung abgestürzt.

My best Code is written with the Delete Key.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

15.12.2012, 13:13

Zitat von »SullY«

Ich wollte mich nochmal Entschuldigen weil ich dich mit Fragen gelöchert habe. Ich werde dennoch mit Direct3D weiter machen, dich aber nicht mehr nerven. Versprochen :thumbsup:

Mit diesem Thread hast du dein Versprochen eine Minute vor der PM gebrochen. -.-

Lern die Grundlagen, dann muss du auch nicht ständig solche Threads eröffnen. :dash:
Kann das bitte ein Mod schließen? :cursing:
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

SullY

Treue Seele

  • »SullY« ist der Autor dieses Themas

Beiträge: 103

Wohnort: Vor dem PC :P

Beruf: Schulbankdrücker, Samstagsprospektzeitungsjunge,

  • Private Nachricht senden

3

15.12.2012, 13:15

Es liegt an dir wenn du diesen Thread überhaupt ernst nimmst.

Ich habe ein Problem mit dem Code und bitte hier um Rat. Sollte ein Admin dies nicht als angemessen empfinden kann er es löschen.
Spruch Lädt... 99 % . Verbindung abgestürzt.

My best Code is written with the Delete Key.

idontknow

unregistriert

4

15.12.2012, 13:38

Man kann diesen Thread kaum ernst nehmen. Um deine Frage zu beantworten: ein Funktionspointer kann auch Parameter haben...

5

15.12.2012, 15:31

Ein Funktionszeiger zeigt auf eine Funktion, daher sind die Variablen unbekannt.
Und wie mein Vorredner schon erwähnt hat:

Zitat

ein Funktionspointer kann auch Parameter haben


EDIT: Du greifst zudem mit dem Punkt-Operator auf private Member zu...

lg. denniro
Only God can judge me.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

15.12.2012, 15:36

Mit einem vernünftigen Buch ist diese Frage ganz schnell zu lösen;) Aus Prinzip werde ich hier nicht helfen, so wie es einige andere ja auch sehen;) Dir wurde mehrfach gesagt, dass du ein grundlegendes Buch lesen solltest und dich vernünftig mit den Grundlagen vertraut machen sollst. Soweit ich das im Kopf habe ging es am Anfang um SFML Probleme. Möglicherweise vertue ich mich aber auch da. Aber wer damit nicht klar kommt sollte von DirectX die Finger lassen. Allgemein bist du zu unerfahren. Wenn wir dir helfen bestätigt dich das nur darin dir die Grundlagen eben nicht anzugucken. Dann dauert es nicht lange bis die nächste unsinnige Frage kommt.
Hinweis
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

15.12.2012, 16:22

Ich weiß gar nicht was ihr habt... CEngine... :thumbsup:
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

SullY

Treue Seele

  • »SullY« ist der Autor dieses Themas

Beiträge: 103

Wohnort: Vor dem PC :P

Beruf: Schulbankdrücker, Samstagsprospektzeitungsjunge,

  • Private Nachricht senden

8

15.12.2012, 16:56

Man kann ja nicht alles richtig machen, zumindestens nicht am Anfang. Anfängerfehler kommen immer.

Naja, dann nehme ich einfach Get/Set methoden :|

EDIT: FAil FAIL, ganz vergessen das ich die LPDIRECT3D9 global definiert habe. TISCH-FACE-ERLEBNIS
Spruch Lädt... 99 % . Verbindung abgestürzt.

My best Code is written with the Delete Key.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SullY« (15.12.2012, 17:02)


FSA

Community-Fossil

  • Private Nachricht senden

9

15.12.2012, 17:23

BTW: CEngine ist nicht wirklich ein guter Name um Direct3D zu initialisieren und zu Rendern.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

SullY

Treue Seele

  • »SullY« ist der Autor dieses Themas

Beiträge: 103

Wohnort: Vor dem PC :P

Beruf: Schulbankdrücker, Samstagsprospektzeitungsjunge,

  • Private Nachricht senden

10

15.12.2012, 17:48

Ich arbeite noch dran. Habe gerade 'nen komischen Bug. Visual C++ kennt LPDIRECR3D9 nicht mehr.

Irgendwelche Namen als Empfehlung? :D
Spruch Lädt... 99 % . Verbindung abgestürzt.

My best Code is written with the Delete Key.

Werbeanzeige