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

propper

Frischling

  • »propper« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Internet

  • Private Nachricht senden

1

19.06.2015, 20:06

[C++] Forward Declaration without Pointer to Incomplete

Hey,
ich arbeitete grade so an meinem Spiel in welchem ich oft Pointer zur Grundlegenden Klasse welche alles so verwaltet benötigte, jedoch konnte ich vieles mit einzelnen Pointern auf exakt das, was ich dort brauchte, überbrücken.
Nun, jetzt muss ich eine Funktion aus der Grundlegenden Klasse von einer über mehrere Includes inkludierte höheren Klasse ausführen. Dazu wollte ich dann einen Funktionspointer erstellen, nur für Funktionspointer zu Funktionen einer Klassen, benötigt man die Deklaration der Klasse mit der Funktion (include), in der Klasse mit dem Funktonspointer. Nur dann würde es ja ein zirkulären Include ergeben, was in Fehlern endet. Also möchte ich jetzt einen Pointer zur Grundklasse im globalen Namespace erstellen. Habe ich auch gemacht, jedoch mit forward declaration, was diesen Pointer incomplete macht, weswegen er mir nicht viel bringt, da ich in den Klassen, in denen ich ihn brauche, erst die Grundklasse inkludieren müsste, was wieder in Fehlern endet.

Gibt es einen weg, durch Forward Declaration über einen Pointer auf alle Member zuzugreifen? Oder irgend ein anderen Weg?

Danke für eure Hilfe

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

19.06.2015, 20:12

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Foo.hpp
class Bar;

class Foo{Bar bar;}

// Foo.cpp
#include "Foo.hpp"
#include "Bar.hpp"

// ...

// Bar.hpp
#include "Foo.hpp"

class Bar{Foo foo;}

propper

Frischling

  • »propper« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Internet

  • Private Nachricht senden

3

19.06.2015, 20:15

whow, danke! Ich kam einfach nicht mehr drauf :thumbsup:

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

19.06.2015, 20:20

nur für Funktionspointer zu Funktionen einer Klassen, benötigt man die Deklaration der Klasse mit der Funktion (include)
Nein. std::function und Lambda.
Zirkuläre Abhängigkeiten solltest Du generell vermeiden.
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]

5

19.06.2015, 20:20

Man kann aber keine Instanzen von noch nicht definierten klassen erstellen, höchstens zeiger und referenzen darauf.

Werbeanzeige