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

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

1

02.04.2006, 12:11

[OOP] Verteielt auf mehrere Source Dateien?

Ich habe ein wenig mit fremdem Code rumgedaddelt und ihn an mein Bedürfnisse angepasst. Interessant für mich war das dieser Code Objektorientiert geschrieben ist wovor ich mich bisher gedrückt habe :angel: Je mehr ich aber damit arbeite umso mehr merke ich was für eine tolle Sache das doch ist. Also erstmal Buch bestellt und eigentlich warten wollen bis es da ist aber ... Ich hab Ferien und wollte nun doch weitermachen, Buch ist noch nicht da und dann baue ich ma auf euch.

Problem ist simpel. In meiner Winmain siehts so aus

C-/C++-Quelltext

1
2
    // Verbinden

    ClientConnection myConnection(cServerIP, cServerPort);


Nun habe ich dann aber noch eine zweite Quellcodedatei in welcher ich auf genau diese Instanz der Klasse zugreifen möchte. Wie mache ich das? Bei Variablen geht sowas ja easy mit extern, aber bei Klassen?

Ich will eigentlich (ich schäme mich :angel: ) nur eine Lösung für mein Problem, bin mir sicher das mir das Buch auch erklären wird, nur ist das eben noch nicht da :crying:

Anonymous

unregistriert

2

02.04.2006, 13:04

extern geht bei allem, sollte man aber nicht benutzen.

Im GameDev sowie HighEnd Applications wird dafür gerne ein FactoryPattern benutzt im Combo mit einem Manager, so das man per Alias auf die Klasse zugreifen kann.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

02.04.2006, 13:20

Oder man übergibt einfach der Methode aus der anderen Datei eine Ref/ einen Zeiger der Instanz :) . Versucht sich das wiedermal einer an Socketprogrammierung? ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

4

02.04.2006, 13:27

Hihi, ja :)

Zeiger übergeben klingt sinnvoll, schon komisch das es soviel Arbeit ist den Quellcode auf mehrere Dateien aufzuteilen :rolleyes:

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

02.04.2006, 13:33

Überhaupt nicht. Man muss es nur von Anfang an machen, dann ergibt es sich ganz von selbst.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Anonymous

unregistriert

6

02.04.2006, 13:36

Man muß sein Codedesign ganz klar darauf abstimmen. Planung ist hier das absolute A und O. Irgendwann kommt man ohne Planung dann an den Punkt: "Oh man, nein, das habe ich gar nicht vorher gesehen, Klasse jetzt komm ich nicht weiter..."

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

8

02.04.2006, 17:02

Ok, kleine Nachfrage noch ...

C-/C++-Quelltext

1
2
3
client_clientconnection.cpp
.\client_clientconnection.cpp(8) : error C2011: 'ClientConnection' : 'class' type redefinition
        g:\proggingstuff\projekte\gxdraw_client\client_clientconnection.h(7) : see declaration of 'ClientConnection'


Was das heisst ist mir schon klar. Schätze das hängt mit meinem Header bzw Source zusammen. Header schaut so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class ClientConnection
{
public:
    ClientConnection(char * serverIP, char * portString);
    ~ClientConnection();   
    void Reconnect(char * serverIP, char * portString);    
    void AddLineLocal(s32 x1, s32 y1, s32 x2, s32 y2);    
    void SendLineToServer(s32 x1, s32 y1, s32 x2, s32 y2);
    list<line2d<s32> > * GetLineList();
    void DrawLines(IVideoDriver * irrVideo);
    void DeleteLines(void);
    void ListenForPackets();
    bool ServerOnline(void);
    void HandlePacket(Packet * p);
    void Admin_DeleteLines(void);
    void SetStandardRes(void);
    void SetServerRes(int x, int y);
    unsigned long GetAvrgPing(void);
}

Code ansich eben genauso, nur das die Methoden nochmal echten code enthalten.

Google sagt mir ich soll ein virtual vor meine Klassen hängen? Brachte aber in beiden Fällen nix, was soll ich also tun?

Phili

unregistriert

9

02.04.2006, 17:43

Also was mir jetzt auffällt ist, das das ";" nach der Klasse fehlt. Weiß nicht ob es daran liegt aber ne Fehlermeldung gibt das in jedem Fall...

Phili

unregistriert

10

02.04.2006, 17:45

Sonst könnte das mit der Redefinition damit zusammenhängen, das was mehrfach gelinkt wird.

Würd mal (falls noch nicht gemacht)

C-/C++-Quelltext

1
2
3
#ifndef _client_clientconnection_

#define _client_clientconnection_



und

C-/C++-Quelltext

1
#endif


benutzen

Werbeanzeige