PC erkennt Klassendeklaration statt Definition
-
Hi,
Frage:
extern virtual void Except::MSG(); //und die anderen funktionenWarum machst du dass?
mfg
v R
-
@virtuell Realisticer(Zitat von mir Z. 3, 4 oder 5, siehe oben):
(Ich habe auch die Funktionen mit in den Namespace geschrieben, damit man anhand des Namespaces schon mit der DLL arbeiten kann und theoretisch keine Doku braucht)
Das spuckt VC++ aus:
--------------------Konfiguration: Exceptions - Win32 Debug--------------------
Kompilierung läuft...
Source.cpp
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(8) : error C2653: 'Exceptions' : Keine Klasse oder Namespace
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : error C2079: 'Except' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : error C2239: Unerwartetes Token '{' nach der Deklaration von 'Except'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(16) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(16) : error C2079: 'NO_SLIME' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(16) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'NO_SLIME'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(16) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(27) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(27) : error C2079: 'NO_FOOD' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(27) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'NO_FOOD'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(27) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(38) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(38) : error C2079: 'NO_WOOD' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(38) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'NO_WOOD'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(38) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(49) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(49) : error C2079: 'NO_METAL' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(49) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'NO_METAL'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(49) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(60) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(60) : error C2079: 'NO_GOLD' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(60) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'NO_GOLD'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(60) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(71) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(71) : error C2079: 'NO_MANA' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(71) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'NO_MANA'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(71) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(82) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(82) : error C2079: 'WReady' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(82) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'WReady'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(82) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(93) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(93) : error C2079: 'BReady' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(93) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'BReady'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(93) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(104) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(104) : error C2079: 'Attacked' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(104) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'Attacked'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(104) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(115) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(115) : error C2079: 'Hero_died' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(115) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'Hero_died'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(115) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(126) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(126) : error C2079: 'Hero_lvlup' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(126) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'Hero_lvlup'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(126) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(137) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(137) : error C2079: 'WIN' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(137) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'WIN'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(137) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(148) : error C2027: Verwendung des undefinierten Typs "Exceptions"
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(9) : Siehe Deklaration von 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(148) : error C2079: 'LOOSE' verwendet undefiniertes class 'Exceptions'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(148) : error C2239: Unerwartetes Token ':' nach der Deklaration von 'LOOSE'
c:\programme\microsoft visual studio\myprojects\exceptions\excepts.h(148) : error C2059: Syntaxfehler : 'public'
c:\programme\microsoft visual studio\myprojects\exceptions\namespaceexcept.h(7) : error C2059: Syntaxfehler : '__declspec(dllexport ) '
c:\programme\microsoft visual studio\myprojects\exceptions\namespaceexcept.h(7) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
c:\programme\microsoft visual studio\myprojects\exceptions\namespaceexcept.h(7) : error C2447: Funktionskopf fehlt - Parameterliste im alten Stil?
Fehler beim Ausführen von cl.exe.Exceptions.dll - 58 Fehler, 0 Warnung(en)
Gruß
Glamdring
-
namespace __declspec(dllexport) Exceptions{ }
Ich glaube(!) das __declspec(dllexport) einfach beim namespace nix verloren hat. Nimms mal weg und compilier es neu.
Die namespaces gibt es für den Linker z.B. nicht mehr. Also wirds die auch für ne DLL nicht mehr geben wenn sie verwendet wird.
-
Das entfernen von __declspec(dllexport) verursacht noch mehr Fehler(74) und 14 Warnungen. Aber noch ne kleine Frage, kann man keine Namespaces in DLL Dateien verwenden??? Und gibt es irgendwo ne Anleitung, wie man die DLLs einbindet und auf die DLL - Funktionen zugreift?
thx
Glamdring
-
Hmm...
Was ich grad sehe:
Du inkludierst die Dateien gegenseitig. Das geht nicht.
Lies mal den Beitrag:
http://c-plusplus.net/forum/viewtopic.php?t=4751&highlight=querverweis
das hilft Dir zu verstehen wo das Problem liegt.
-
@ Knuddlbaer: Danke, ich habs verstanden.
Ich hab aber dennoch ein Problem, ich habe den Namespace gelöscht und die Klassen gelassen, wie sie waren. Dann hab ich die DLL erstellt. Jetzt wollte ich das ganze mal anhand einiger Links
(
http://www.mut.de/media/buecher/VCPLUS6/data/kap17.htm
http://www.henkessoft.de/api6.htm
) ausprobieren, ich hab die .LIB-Datei gelinkt, in ein Konsolenprogramm eingebaut und wollte dann in der mainfunktion eine dieser Klassen erstellen(NO_SLIME Ansgar;)aber er findet die Klasse nicht.
Woran kann das liegen(die .LIB-Datei wird scheinbar gelinkt, weil er dazu keinen Fehler bringt)thx
Glamdring
-
denke man kann dir im msvc forum besser helfen, thread verschoben
-
du musst die Headerdatei einbinden, sie ist nur für den compiler und die syntaxprüfung, der linker verknüpft die aufrufe dann mit der dll.
übrigens:
ich habe gelesen, dass Exceptions (mit throw) nicht in einer DLL ausgeführt werden sollen, wenn diese nicht vorher abgefangen d.h innerhalb der DLL.
wobei ich bei MFC nicht sicher bin!
sonst gibt es ein problem
les dir mal das durch:
http://www.c-plusplus.net/forum/viewtopic.php?t=15291&highlight=throw+dlldie suche nach "throw" und "dll" zeigt dir nóch mehr probleme zu diesem thema
-
Sry, wenn ich noch mal dumm naqchfragen muss, aba muss die .h Datei eingebunden werden, mit der die DLL erstellt wurde (wenn ja ist das ja nicht mehr dynamisch und mann müsste bei änderungen der DLL das ganze neu kompilieren).
Zum Thema exceptions muss ich sgaen, dass ich das so verstehe, dass man die Exceptions nur nicht innerhalb der DLL "geschmissen" werden dürfen. Aber die Klassen sollen in einer Exe "geschmissen" werden und sind nur zum erweitern in einer DLL, quasi als zwischenspeicher.
thx
Glamdring
-
die definition in der header datei hat keinerlei code und ist auch nur für den compiler gedacht, damit er weiß was er mit dem benutzten klassenbezeichner anfangen soll.
später nutzt der linker die lib datei um dann auch den code ausführen zu können.throw sollte nicht aus der DLL gehen,
aber wenn throw nicht in der dll ist sollte es funkzen.