Hallo liebe Community!
Ich baue im Moment einen .NET Wrapper (C++/CLI) für ein C++ Projekt.
Es lief bisher ganz gut, bis ich die Taste zum Kompilieren gedrückt habe
In dem C++ Projekt ist es so, das manche Header Dateien, die vorher hinzugefügt (included) worden sind als andere, auf Klassen verweisen die erst später als die momentane Header Datei hinzugefügt worden ist.
Beispiel:
Nun, dies ist kein Problem denn wir können dies ganz einfach mittels einer forward Declaration lösen (Welches das C++ Projekt auch nutzt).
In meinem CLI Wrapper jedoch, sieht die Sache etwas anders aus.
Ich habe genau die selbe Situation wie das C++ Projekt wo Klassen auf Klassen verweisen die erst später hinzugefügt werden.
Nun... Wo ist das Problem? Ich könnte das Problem doch auch einfach mit forward Declarations lösen...
Das habe ich versucht, das Problem ist nur, das die properties in diesem Fall, vesuchen auf ein Feld IN der Klasse zuzugreifen, und da diese Klasse nur eine forward Declaration ist, hat der compiler keine Ahnung das dieses Feld in dieser Klasse existiert (Soweit ich das verstanden habe)
Echtes Beispiel aus meinem C+/CLI Wrapper Projekt:
IVSDKForwardDeclarations.h:
IVPlayerInfo.h:
Bei Zeile 6 zeigt Visual Studio keinen Fehler beim kompilieren an.
Bei Zeile 13 zeigt Visual Studio folgenen Fehler beim kompilieren: use of undefined type 'IVVehicle'
Bei Zeile 20 zeigt Visual Studio folgenen Fehler beim kompilieren: use of undefined type 'IVVehicle'
Klingt logisch für mich. Der Compiler hat keine Ahnung dass das Feld "NativeVehicle" in der "IVVehicle" Klasse existiert. Beim Constructor bin ich mir aber nicht sicher... Aber laut der Fehlermeldung hat der Compiler auch keine Ahnung das diese Klasse einen Constructor hat.
Als nächstes habe ich versucht meine "IVVehicle" forward Declaration etwas zu ändern.
IVSDKForwardDeclarations.h:
Nun beinhaltet die Klasse den Constructor und das Feld. (Kann man dies immernoch als "forward Declaration" bezeichnen?)
Der Fehler verschwindete Doch nun haben wir neue Fehler... Und dort weiß ich wirklich nicht mehr weiter...
In der function definition für "static IVPed^ FindThePlayerPed();" in der "IVPlayerInfo" Klasse die so aussieht:
Zeigt Visual Studio nun bei Zeile 6 folgenen Fehler an: 'IVSDKDotNet::IVPlayerInfo::FindThePlayerPed': redefinition; different basic types
Und bei Zeile 7: 'IVSDKDotNet::IVPed ^IVSDKDotNet::IVPlayerInfo::FindThePlayerPed(void)': overloaded function differs only by return type from 'IVPed ^IVSDKDotNet::IVPlayerInfo::FindThePlayerPed(void)'
Worum handelt sich dieser Fehler genau? Und wie könnte ich ihn beheben?
In meiner "IVSDKForwardDeclarations.h" Datei habe ich auch eine "forward Declaration" für die "IVPed" Klasse:
Falls ihr mehr Informationen benötigt, lasst es mich wissen!
Danke!
Nur zur Info: Bin absolut kein C++ Profi.
Ich baue im Moment einen .NET Wrapper (C++/CLI) für ein C++ Projekt.
Es lief bisher ganz gut, bis ich die Taste zum Kompilieren gedrückt habe
In dem C++ Projekt ist es so, das manche Header Dateien, die vorher hinzugefügt (included) worden sind als andere, auf Klassen verweisen die erst später als die momentane Header Datei hinzugefügt worden ist.
Beispiel:
Nun, dies ist kein Problem denn wir können dies ganz einfach mittels einer forward Declaration lösen (Welches das C++ Projekt auch nutzt).
In meinem CLI Wrapper jedoch, sieht die Sache etwas anders aus.
Ich habe genau die selbe Situation wie das C++ Projekt wo Klassen auf Klassen verweisen die erst später hinzugefügt werden.
Nun... Wo ist das Problem? Ich könnte das Problem doch auch einfach mit forward Declarations lösen...
Das habe ich versucht, das Problem ist nur, das die properties in diesem Fall, vesuchen auf ein Feld IN der Klasse zuzugreifen, und da diese Klasse nur eine forward Declaration ist, hat der compiler keine Ahnung das dieses Feld in dieser Klasse existiert (Soweit ich das verstanden habe)
Echtes Beispiel aus meinem C+/CLI Wrapper Projekt:
C-Quellcode
- // Dies ist in der pch.h Datei
- #include "IVSDKForwardDeclarations.h" // Dies beinhaltet all meine forward Declarations so das alle anderen Header Dateien die danach hinzugefügt werden Zugriff auf diese haben
- #include "IVPlayerInfo.h" // Dies beinhaltet eine Klasse die nicht nur auf die "IVVehicle" Klasse verweisen möchte, sondern auch auf ein Feld IN der "IVVehicle" zugreifen möchte.
IVSDKForwardDeclarations.h:
IVPlayerInfo.h:
C-Quellcode
- #pragma once
- namespace IVSDKDotNet
- {
- public ref class IVPlayerInfo
- {
- public:
- property IVVehicle^ OnlyEnterThisVehicle // Verweist auf die "IVVehicle" Klasse.
- {
- public:
- IVVehicle^ get()
- {
- NULLPTR_CHECK_WITH_RETURN(NativePlayerInfo, nullptr);
- NULLPTR_CHECK_WITH_RETURN(NativePlayerInfo->m_pOnlyEnterThisVehicle, nullptr);
- return gcnew IVVehicle(NativePlayerInfo->m_pOnlyEnterThisVehicle); // Versucht eine neue Instanz dieser Klasse zu erstellen.
- }
- void set(IVVehicle^ value)
- {
- NULLPTR_CHECK(NativePlayerInfo);
- NULLPTR_CHECK(NativePlayerInfo->m_pOnlyEnterThisVehicle);
- NULLPTR_CHECK(value);
- NativePlayerInfo->m_pOnlyEnterThisVehicle = value->NativeVehicle; // Versucht auf das "NativeVehicle" Feld in der "IVVehicle" Klasse zuzugreifen.
- }
- }
- public:
- static IVPed^ FindThePlayerPed(); // Für später interessant
- };
- }
Bei Zeile 6 zeigt Visual Studio keinen Fehler beim kompilieren an.
Bei Zeile 13 zeigt Visual Studio folgenen Fehler beim kompilieren: use of undefined type 'IVVehicle'
Bei Zeile 20 zeigt Visual Studio folgenen Fehler beim kompilieren: use of undefined type 'IVVehicle'
Klingt logisch für mich. Der Compiler hat keine Ahnung dass das Feld "NativeVehicle" in der "IVVehicle" Klasse existiert. Beim Constructor bin ich mir aber nicht sicher... Aber laut der Fehlermeldung hat der Compiler auch keine Ahnung das diese Klasse einen Constructor hat.
Als nächstes habe ich versucht meine "IVVehicle" forward Declaration etwas zu ändern.
IVSDKForwardDeclarations.h:
Nun beinhaltet die Klasse den Constructor und das Feld. (Kann man dies immernoch als "forward Declaration" bezeichnen?)
Der Fehler verschwindete Doch nun haben wir neue Fehler... Und dort weiß ich wirklich nicht mehr weiter...
In der function definition für "static IVPed^ FindThePlayerPed();" in der "IVPlayerInfo" Klasse die so aussieht:
Zeigt Visual Studio nun bei Zeile 6 folgenen Fehler an: 'IVSDKDotNet::IVPlayerInfo::FindThePlayerPed': redefinition; different basic types
Und bei Zeile 7: 'IVSDKDotNet::IVPed ^IVSDKDotNet::IVPlayerInfo::FindThePlayerPed(void)': overloaded function differs only by return type from 'IVPed ^IVSDKDotNet::IVPlayerInfo::FindThePlayerPed(void)'
Worum handelt sich dieser Fehler genau? Und wie könnte ich ihn beheben?
In meiner "IVSDKForwardDeclarations.h" Datei habe ich auch eine "forward Declaration" für die "IVPed" Klasse:
Falls ihr mehr Informationen benötigt, lasst es mich wissen!
Danke!
Nur zur Info: Bin absolut kein C++ Profi.
Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button
Für VB.NET Entwickler: Option Strict On nicht vergessen!
Für VB.NET Entwickler: Option Strict On nicht vergessen!