Technician Geschrieben 31. Mai 2002 Geschrieben 31. Mai 2002 Hallo, ich hatte ja das Problem, große Zahlen in C++ verwenden zu müssen. Also hab ich mir auf der Site http://www.perfsci.com/free/giantint/ eine Headerdatei, das dazugehörige C-File etc. runtergeladen. Das ganze ist C, nicht C++. Und hier ist der Haken: wenn ich das im VisualStudio compiliere, geht das nur, solange die Dateien die Endung "c" haben. Ist die Endung "cpp", dann geht nix :eek: Mein Problem jetzt, ich will (und kann) für mein Programm nicht bei C bleiben, sondern muss C++ (OOP etc...) verwenden. Wenn ich das File mit der Main-Funktion mit der Endung cpp versehe, dann mag er das zwar compilieren, aber es gibt nen Linker-Fehler, sobald ich einen Giant-Wert anlege bzw. insgesamt sobald ich Funktionen, die aus der Headerdatei stammen, verwende... Kann mir das nicht erklären, denn mit der Erweiterung "C" klappt's ja :eek: C++ müsste doch mit C problemlos umgehen können, oder?! Ich hoffe, mir kann das jemand erklären, damit ich den Fehler finde (wär ja zu schön, wenn das nicht gehen würde.... ) Viele Grüße, Technician Zitieren
Klotzkopp Geschrieben 31. Mai 2002 Geschrieben 31. Mai 2002 Kann es sein, dass Du die umbenannte Datei nicht dem Projekt hinzugefügt hast? Zitieren
Technician Geschrieben 31. Mai 2002 Autor Geschrieben 31. Mai 2002 Original geschrieben von Klotzkopp Kann es sein, dass Du die umbenannte Datei nicht dem Projekt hinzugefügt hast? Die Datei giants.c blieb ja "giants.c". Ich habe nur die Datei mit der Main-Funktion umbenannt - und die ist definitiv dem Projekt hinzugefügt (sehe ich auch links im Verzeichnis). Zitieren
Technician Geschrieben 31. Mai 2002 Autor Geschrieben 31. Mai 2002 Original geschrieben von Daragon Falls das von Klotzkopp nicht klappt, dann versuch doch einfach mal die herunter geladenen Files mit ein bißchen Copy&Paste in c++ typischen Dateien abzuspeichern, einer Header Datei und einer Cpp Datei. Das müßte dann eigentlich klappen. Falls du meinst, ne C++ Datei erzeugen und den Code da einfügen - genau das mag der Compiler eben nicht Meinst du, den Code "umschreiben"? --> Boaaaaah! Und direkt am Compilieren wird's doch wohl nicht liegen, wenn es ein Linker-Fehler ist, oder? (Die Dateien einzeln compilieren, das geht...) Sollte nicht C++ alles compilieren und linken können, was C checkt, oder?! Technician Zitieren
DBO Geschrieben 31. Mai 2002 Geschrieben 31. Mai 2002 probiers mal so: -leg dir eine neue cpp file an: z.B. Test.cpp in die schreibst du dann einfach #include "Test.C" //evtl. Passendes relatives Verz. angeben diese Test.cpp fügst du dann einfach deinen projekt hinzu;) tschau Zitieren
Technician Geschrieben 31. Mai 2002 Autor Geschrieben 31. Mai 2002 Original geschrieben von Daragon Also ich habe die Erfahrung gemacht, das der Borland Builder manchmal echt ne Macke hat. Da kommt bei mir auch öfter mal die Fehlermeldung "Unresolved External" was soviel heißt wie Linker-Fehler. Die Dateien einfach mal alle aus dem Projekt entfernen und dann wieder hinzufügen, hilft manchmal echt Wunder!!! Hat leider auch nix gebracht... Ich hab das gestern auf meinem Computer probiert und jetzt hier in der Arbeit -> war beidesmal nix... Original geschrieben von Daragon Mit dem umprogrammieren, du brauchst doch nicht die ganze *.h Datei umzuprogrammieren, sondern kannst dir doch die entsprechenden Methoden aus den Dateien rausholen und dann bei Dir einfügen. auch wenn ich nur die grundlegendsten Funktionen drin habe - sobald ich eine von denen verwende -> ... Zitieren
Technician Geschrieben 31. Mai 2002 Autor Geschrieben 31. Mai 2002 Original geschrieben von DBO probiers mal so: -leg dir eine neue cpp file an: z.B. Test.cpp in die schreibst du dann einfach #include "Test.C" //evtl. Passendes relatives Verz. angeben diese Test.cpp fügst du dann einfach deinen projekt hinzu;) tschau ... dann gibt's zwar keine Linker-Fehler (weil er gar nicht erst soweit kommt ), dafür aber nämlich die Compiler-Fehler, die's auch gibt, wenn ich die C-Datei in CPP umbenenne... Zitieren
Klotzkopp Geschrieben 31. Mai 2002 Geschrieben 31. Mai 2002 Original geschrieben von Technician dann gibt's zwar keine Linker-Fehler (weil er gar nicht erst soweit kommt ), dafür aber nämlich die Compiler-Fehler, die's auch gibt, wenn ich die C-Datei in CPP umbenenne... Was sind denn das für Fehler? Möglicherweise hilft uns das ja weiter... Zitieren
Technician Geschrieben 31. Mai 2002 Autor Geschrieben 31. Mai 2002 Original geschrieben von Klotzkopp Was sind denn das für Fehler? Möglicherweise hilft uns das ja weiter... der Fehler, wenn ich alles in CPP umbenenne: d:\c++\giantint\giants.cpp(261) : error C2440: '=' : 'void *' kann nicht in 'giantstruct *' konvertiert werden Konvertierung von 'void*' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlung und der code in der giants.cpp (der zur Headerdatei gehörenden Datei), wo der Fehler anscheinend identifiziert wird: (hab die entsprechende Zeile jetzt fett gemacht) giant popg ( void ) { int i; if (current_max_size <= 0) current_max_size = MAX_SHORTS; if (cur_stack_size == 0) { /* Initialize the stack if we're just starting out. * Note that all stack giants will be whatever current_max_size is * when newgiant() is first called. */ cur_stack_size = STACK_GROW; stack = (giant *) malloc (cur_stack_size * sizeof(giant)); for(i = 0; i < STACK_GROW; i++) stack[i] = NULL; if (stack_glen == 0) stack_glen = current_max_size; } else if (cur_stack_elem >= cur_stack_size) { /* Expand the stack if we need to. */ i = cur_stack_size; cur_stack_size += STACK_GROW; stack = (giant *) realloc (stack,cur_stack_size * sizeof(giant)); for (; i < cur_stack_size; i++) stack[i] = NULL; } else if (cur_stack_elem < cur_stack_size - 2*STACK_GROW) { /* Prune the stack if it's too big. Disabled, so the stack can only expand */ /* cur_stack_size -= STACK_GROW; for (i = cur_stack_size - STACK_GROW; i < cur_stack_size; i++) free(stack[i]); stack = (giant *) realloc (stack,cur_stack_size * sizeof(giant)); */ } /* Malloc our giant. */ [B]if (stack[cur_stack_elem] == NULL) stack[cur_stack_elem] = malloc(stack_glen*sizeof(short)+sizeof(int));[/B] stack[cur_stack_elem]->sign = 0; return(stack[cur_stack_elem++]); } bin noch nicht soooo gut in C/C++, als dass mir das weiterhelfen würde! Gruß, Technician Zitieren
Klotzkopp Geschrieben 31. Mai 2002 Geschrieben 31. Mai 2002 Setz mal (giantstruct*) vor das malloc. Zitieren
Technician Geschrieben 31. Mai 2002 Autor Geschrieben 31. Mai 2002 Original geschrieben von Klotzkopp Setz mal (giantstruct*) vor das malloc. :Dann geeeeehts!!!!!! :) :e@sy: Dankeeeee! Ich wär nie und nimmer drauf gekommen, dass das so geht :eek: Gruß, Technician Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.