unsigned char * als Parameter übergeben
-
Hallo Leute,
ich habe eine Funktion, die will als Parameter einen const char *. Also:
static void func1(const char*) { //macht irgendwas. }In einer anderen Funktion will ich als Parameter einen unsigned char * übergeben. Also:
usigned char* blabal; func1(blabal);Mein Visual C++ 6 Compiler aber gibt mir folgende Meldung aus beim Linken:
error LNK2001: unresolved external symbol _func1
out/Updater.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.Leider weiß ich nicht, wie ich das Problem am besten lösen kann, weil ich kein C++-Profi bin.
Jemand ne Idee?
-
Mach ein vollständiges Minimalbeispiel, was deiner Meinung nach kompilieren und linken sollte.
Diese Codefragmente von dir lassen mich einen Fehler zur Compile-Zeit erwarten und nicht erst beim Linken; denn ein Zeiger auf unsigned char ist nicht ohne weiteres zu einem Zeiger auf char konvertierbar.
-
starki schrieb:
Jemand ne Idee?
Jup. Lies dir mal den ink bzg. Code posten in meiner Signatur durch, stell danach deine Frage nochmal mit dem vollständigen relevanten Code. Dann kann dir gerne geholfen werden

Der Meldung nach zu urteilen: kann es sein, dass du die Funktion in einer *.cpp-Datei definierst und in einer *.c-Datei Aufrufst? Ist nur geraten, da fehlt einfach noch Code...
starki schrieb:
Mein Visual C++ 6 Compiler
Wir haben 2012. Warum benutzt du einen Compiler aus dem letzten Jahrtausend? Noch dazu einen, der für eine Menge an Fehlern berüchtigt ist. Es gibt inzwischen 5 (!) Folgeversionen, alle frei erhältlich.
-
pumuckl schrieb:
starki schrieb:
Mein Visual C++ 6 Compiler
Wir haben 2012. Warum benutzt du einen Compiler aus dem letzten Jahrtausend? Noch dazu einen, der für eine Menge an Fehlern berüchtigt ist. Es gibt inzwischen 5 (!) Folgeversionen, alle frei erhältlich.
Ganz einfach: Da wo ich arbeite, die haben ein Programm mal in Visual C++ 6 geschrieben gehabt und ich sollte es modifizieren. Deswegen...
Ich hab übrigens die Lösung dann doch selbst gefunden. Problem war, dass ich zwar die Funktion bekannt hatte, also in der Main.h stand folgendes:
void func1(const char*);Ich jedoch hab dann in meiner c-Datei folgendes gehabt:
static void func1(const char*) { //macht irgendwas. }Das
staticeinfach nur wegmachen hat geholfen. Die Meldung kommt nicht mehr und das Programm läuft wie es soll...
-
Weißt Du auch, warum es nun funktioniert?
-
Tachyon schrieb:
Weißt Du auch, warum es nun funktioniert?
Wenn ich mich recht entsinne ist es, weil die Funktion
void func1(const char* text);und die Funktion
static void func1(const char* text);zwar denselben Funktionsnamen haben, im Grunde aber zwei vollkommen unterschiedliche Funktionen sind.
Und weil ich die Version ohne das static zwar bekannt gemacht hatte, aber nur die Version mit static mit Inhalt gefüllt habe, hat der Linker die Version ohne das static nicht gefunden und dann gemeckert, er findet es nicht, weil beide Funktionen unterschiedlich sind...
Ach herje, was für ne Beschreibung. Ich hoffe es stimmt soweit. Ansonsten klärt mich bitte auf ...
-
Ja, das passt schon.
-
krümelkacker schrieb:
Ja, das passt schon.
lol... ich frage mich, ob das ironisch gemeint war :p
und @starki: nein, das hat damit nix zu tun.
Eine Funktion, die mit dem static-keyword versehen ist, wird nicht exportiert, das heißt, sie wird nach außen hin nicht verfügbar gemacht.
Du kannst sie zwar innerhalb der gleichen Quelldatei verwenden, von außen ist sie aber nicht existent und wird daher vom Linker nicht gefunden.
-
Nee, ironisch war das nicht. Wenn du in einer TÜ
static void foo();schreibst und in einer anderen
void foo();dann sind das halt wirklich zwei verschiedene Funktionen, ein foo mit interner Bindung, welches über diesen Namen nur von der TÜ aus erreichbar ist, indem sie deklariert wurde und ein foo mit externer Bindung.
-
Genau. Siehe auch:
http://ideone.com/4Wsva