Zum Inhalt springen

nur mit Erweiterung "c" compilierbar...


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...