Eigenen Header mit oft benutzten Funktionen einbinden
-
Hi, mal eine Frage:
Ich möchte gerne meine oft benutzten Funktionen wie z.B. wait() in einer Datei sammeln und sie so schnell einbinden können in jedes neue Projekt.
Jetzt kann ich mir ja nicht einfach einen Header schreiben, eine dazu passende Quellcode-Datei und beide in den Include-Ordner speichern, dann würden diese ja nicht zusammengehören ...
Ich möchte später im Programm nur schreiben müssen#include <myutils.h> . . .
oder ist das gar nicht möglich, eine Datei zu erstellen, die genau wie z.B. iostream.h gehandhabt wird?
Bzw. muss ich das mit einer statischen Library machen, denn damit kenne ich mich nicht so aus, könnte mir aber vorstellen, dass das helfen könnteVielen Dank schonmal im Voraus
-
Nein, das ist möglich, abgesehen davon das es iostream.h schon lange nicht mehr gibt
Das hängt dann nur von den einstellungen deines Compilers ab.
mit < > sucht er in seinen 'Standard' verzeichnissen, da
kannst du auch was hinzufügen.Mit "" sucht er im lokalen code Verzeichnis, bzw. im angegebenen Pfad.
Devil
-
Hmm ja das weiß ich (nicht das mit iostream.h, aber meinst du das, weil es jetzt nicht mehr die Endung .h hat?), aber meine Frage ist wohl leicht falsch zu verstehen
Wie geht das genau mit dem Einbinden, so dass ich nicht noch eine statische Library zu meinem Projekt hinzufügen muss?
Also dass ich kurz und knapp in meinem Projekt nur das schreibe, was da oben steht. Welche Dateien muss ich dafür erstellen?
Denn das Problem liegt hier: Wenn ich mir nur einen Header test erstelle, etwa so:int double_it(int);
und ins gleiche Verzeichnis (Include, zum schnelleren Benutzen :)) eine Datei test.cpp mit
#include "test.h" int double_it(int zahl) { return zahl * 2; }
dann weiß doch der Compiler beim Einbinden der Header-Datei nicht, dass die Funktionen in genau dieser .cpp-Datei definiert wurden und sagt daher "Unresolved External".
Ich kann das Ganze natürlich über eine .lib machen, aber das ist dann bei jedem neuen Projekt wieder etwas Arbeit, und schließlich will ich ja welche sparenHoffe, so ist es besser zu verstehen
-
du musst evtl. noch den basis header in das projekt includieren.
-
Johannes Maier schrieb:
Hmm ja das weiß ich (nicht das mit iostream.h, aber meinst du das, weil es jetzt nicht mehr die Endung .h hat?), aber meine Frage ist wohl leicht falsch zu verstehen
Wie geht das genau mit dem Einbinden, so dass ich nicht noch eine statische Library zu meinem Projekt hinzufügen muss?
Also dass ich kurz und knapp in meinem Projekt nur das schreibe, was da oben steht. Welche Dateien muss ich dafür erstellen?
Denn das Problem liegt hier: Wenn ich mir nur einen Header test erstelle, etwa so:int double_it(int);
und ins gleiche Verzeichnis (Include, zum schnelleren Benutzen :)) eine Datei test.cpp mit
#include "test.h" int double_it(int zahl) { return zahl * 2; }
dann weiß doch der Compiler beim Einbinden der Header-Datei nicht, dass die Funktionen in genau dieser .cpp-Datei definiert wurden und sagt daher "Unresolved External".
Ich kann das Ganze natürlich über eine .lib machen, aber das ist dann bei jedem neuen Projekt wieder etwas Arbeit, und schließlich will ich ja welche sparenHoffe, so ist es besser zu verstehen
was das? C-code?!
wenn du ne lib machst, ist das auch wenig stressig. du musst halt jedesmal den pfad angeben, dass er dort nach headerdateien suchen soll. also irgendwas musste ja machen, damit du die header einbinden kannst.
alternativ kannst du auch einfach die header+cpp in den projektverzeichnis reinkopieren und dann projekt->dateien hinzufuegen...
wenn dir das zuviel stress ist, dann weiss ich auch nicht.
loesen koenntest du das problem mit einem standard-makefile. das muesstest du dann aber auch ejdesmal kopieren...Esco
-
Du kannst deine LIB dann doch auch in der Header-Datei einbinden:
#pragma comment(lib,"MeineFunks.lib")
Musst natürlich dann im Visual Studio den Lib- und Header-Path korrekt einstellen, aber das merkt sich das VS ja Projektunabhängig.
Wenn du danach einfach nur deinen Header einbindest sollte es funktionieren. Ich mach das mit ner DLL, klappt wunderbar, ich kann immer sofort meine eigenen Funktionen benutzen..