Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?!:rolleyes::(

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

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).

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

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

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 -> ...

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 :D), dafür aber nämlich die Compiler-Fehler, die's auch gibt, wenn ich die C-Datei in CPP umbenenne...

Original geschrieben von Technician

dann gibt's zwar keine Linker-Fehler (weil er gar nicht erst soweit kommt :D), 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...
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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.