.| Autor | Beitrag |
|---|---|
|
000 06.04.2002, 18:46 Kriz |
Brrrr, kann mir mal einer von den Herrn Coderkollegen erklären, wieso meine statische Win32-Lib nur dann funzt, wenn dort simple Funktionen definiert werden und dann wiederum nicht funzt, wenn ich eine Klasse da reinpacke? Beispiel: Gemeinsame Headerdatei für die Lib und das Testprogramm error C2027: Verwendung des undefinierten Typs "TestClass" Dann habe ich "extern TestClass c;" probiert, obwohl das ja schwachsinnig ist, denn die Header wird ja eingebunden mit der Deklaration. Aber selbst so hat es nicht gefunzt. Funzen tut es nur, wenn ich die Klasse rauskommentiere. Dann geht die Library wunderbar, d.h. GetInt() funzt. Aber wie zum Henker schaffe ich es, daß diese Klasse im Testprogramm erkannt wird? Das geht, denn die MSDN weist ausdrücklich darauf hin (wäre auch komisch, wenn eine C++ Library keine Klassen verarbeiten könnte. Cu EDIT - Habe Instanz class in c geändert o_O (Nur damit's keine doofen Bemerkungen gibt =) --K:R-I)Z++ Dieser Beitrag wurde am 06.04.2002 um 19:38 von Kriz bearbeitet. |
|
Profil || Suche |
|
001 06.04.2002, 20:35 mani |
w00t w00t ganz einfach: lib.cpp: ich werd verrückt :O codeeinrücken funzt --Dieser Beitrag wurde am 06.04.2002 um 20:41 von mani bearbeitet. |
|
Profil || Suche |
|
002 06.04.2002, 20:44 Kriz |
Das Ergebnis nach 1.5 Std. Query... Hehehe Also zusammengefaßt: eine reine Klassendeklaration in der Header mit anschließender Definition in der Quelldatei is nicht drin! Man muß also tatsächlich die Definition in die header verlegen, ehe das geht! --K:R-I)Z++ Dieser Beitrag wurde am 06.04.2002 um 20:45 von Kriz bearbeitet. |
|
Profil || Suche |
|
003 07.04.2002, 00:48 Another1 |
is doch logisch, wo soll denn der compiler beim compilieren des hauptprogramms (main.cpp oso) aus sonem header: int GetInt(void); die klassendefinition für die Instanz der selbigen herholen? Another1 ...relaxing..atm =) Dieser Beitrag wurde am 07.04.2002 um 00:49 von Another1 bearbeitet. |
|
Profil || Suche |
|
004 07.04.2002, 02:02 Kriz |
Nun ja, meine ursprüngliche Idee basierte auf folgender Überlegung: Ich schreibe eine statische Library, bestehend aus der Headerdatei für andere Programme und der passenden Quelldatei. Überlegung #1: Die Quelldatei wird nach dem Kompilieren in eine Library übersetzt und ist Dritten damit nicht mehr (offensichtlich) zugänglich. Das heißt ja nichts anderes als daß die Prototypen von Funktionen in der Headerdatei liegen und die dazugehörigen Implementierungen in der (späteren) Library. Überlegung #2: Wenn ich aber jetzt eine Klasse in der Header bekanntmache (class TestClass;), dann wäre es ja nur von Nutzen, wenn Prototyp und (!) Implementierung in der Library stehen und Dritten dann nicht mehr ersichtlich sind, weil ein Dritter sonst dahergehen kann und private/geschützte Elemente und Methoden ohne Rücksicht öffentlich machen kann und so der Sinn der Klasse hinwegfegt. Da die Implementierung von Methoden in C++ keine zwingend zusätzlichen Zugriffsattribute kennt (wie das in Java z.B. der Fall ist), kann ein Dritter also leicht aus der Methode Das waren die Gründe, warum ich in der Header nur class TestClass; schreiben wollte... --K:R-I)Z++ Dieser Beitrag wurde am 07.04.2002 um 02:04 von Kriz bearbeitet. |
|
Profil || Suche |
|
005 07.04.2002, 11:10 Tron |
klar, dass das mit ner reinen forward-derklartion nicht funzt! zumindest einen kleinen gegentrick kannst du anwenden: (obwohl der genauso unkonform ist) 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
006 07.04.2002, 16:42 Prefect |
Naja, private/protected ist schließlich nicht für Sicherheit gegen Hacker, sondern für Sicherheit gegen dumme Programmierer gedacht. Trotzdem: wenn du möglichst viele Implementationsdetails "verstecken" willst würde ich sowas machen:
Wenn virtuelle Methoden nicht gewünscht sind, könnte man natürlich ein paar Methoden nicht-virtuell in Foo deklarieren, würde mit ein bißchen gehacke genauso gehen. Aber das ist der Aufwand dann wohl doch nicht wert ;) cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |

