headerdatei in EE einbinden
-
Hi Leute
Kennt jmd eine Anleitung in der erklährt wird wie man eigene headerdateien in sein C++ Projekt einbinden kann? Ich habs schon mal versucht und bis jetzt siehts ned gut aus. Meine Headerdatei sieht so aus:#ifndef FUNCTIONS_H #define char to_small(char c){ if (c >= 65 && c <= 90){ c = c+32; cout << c; return c; } else { cout << "\nEingabe entspricht keinem Buchstaben!\n"; return 0; } } #endif
C++ Projekt:
#include "stdafx.h" #include <iostream> #include "function.h" using namespace std;
Danke
-
Wo liegt das Problem?
-
Erstens: Eine #define Direktive ohne zumindest den Makronamen dürfte dir der PRäprozessor übel nehmen.
Zweitens: Eine Funktionsdefinition direkt im Header nimmt dir irgendwann der Linker übel (Stichwort "ODR").
Drittens: Bitte verlass dich nicht darauf, daß immer vor deinem Header die <iostream> eingebunden wird - wenn du sie brauchst, binde sie selber ein. (darüber, daß der Header nichts von der using-Direktive hat, sage ich mal nichts)
Viertens: Warum nimmst du nicht einfach std::man: tolower()?
-
Fünftens: Es gibt auch Buchstaben, die nicht zwischen A und Z liegen...
-
ok es funktioniert jetzt
aber was soll das heisen:
Zweitens: Eine Funktionsdefinition direkt im Header nimmt dir irgendwann der Linker übel (Stichwort "ODR").
wie soll ichs sonst machen?
Viertens: Warum nimmst du nicht einfach std::tolower()?
Die kannte ich gar nicht außerdem will ich sowieso eine funktion der ich n char array übergeben kann...
-
ischhcsi schrieb:
aber was soll das heisen:
Zweitens: Eine Funktionsdefinition direkt im Header nimmt dir irgendwann der Linker übel (Stichwort "ODR").Der Header wird bei größeren Projekten mitunter in mehreren Übersetzungseinheiten eingebunden - und dann hast du plötzlich mehrere Ausgaben der Funktion in deinem Programm und der Linker kann sich nicht entscheiden, welcher davon die beste ist (ODR="Onde Definition Rule" - jedes "Objekt" darf nur einmal im Programm definiert sein).
Korrekt packt man so eine Funktion in eine eigene CPP Datei und lässt im Header nur den dazugehörigen Prototypen stehen.
Viertens: Warum nimmst du nicht einfach std::tolower()?
Die kannte ich gar nicht außerdem will ich sowieso eine funktion der ich n char array übergeben kann...Das kann deine Funktion auch nicht - und auf der anderen Seite hindert dich niemand daran, tolower() in einer Schleife auf jedes Array-Element loszulassen.