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.


Anmelden zum Antworten