Funktionen die bool zurückgeben ?



  • Hallo ! Ich hab mal ne frage so am frühen abend :
    Ich wollte mal ein Beispiel aus meinem Buch nachproggen ! Ich soll ein Prgramm schrieben das nachguckt ob das eingegebene Jahr ein Schaltjahr ist ! Schwerpunkt liegt auf Funktionen ! Mein Ansatz :

    Hauptdatei.cpp

    #include <iostream>
    #include "funktionen.h"
    
    int main()
    {
    	int jahr;
    
    	std::cout << "Gebe eine Jahreszahl ein : \n";
    	std::cin >> jahr;
    
    	std::cout << "\n" << isSchaltjahr(jahr);
    }
    

    Funktionen.cpp

    #include <iostream>
    
    bool isSchaltjahr(int jahr)
    {
    	if(jahr%4 == 0)
    		return true;
    	else
    		return false;
    }
    

    funktionen.h

    int isSchaltjahr(int)
    

    Mein Compiler meckert:
    Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""int __cdecl isSchaltjahr(int)" (?isSchaltjahr@@YAHH@Z)" in Funktion "_main". HauptDatei.obj
    Fehler 2 fatal error LNK1120: 1 nicht aufgelöste externe Verweise. C:\Dokumente und Einstellungen\Simon\Eigene Dateien\Visual Studio 2008\Projects\ProjektMappe\Debug\HelloWorld.exe 1

    Kann mir da jemand helfen ?



  • 1. Das ist ein Linker-Fehler. Hast du beide Cpp-Dateien kompiliert und dem Linker übergeben?

    2. Im Header musst Du die Funktionsdeklaration mit einem ";" abschließen.

    3. Volle Jahrhunderte sind auch keine Schaltjahre, es sei denn sie sind durch 400 teilbar 😉


  • Administrator

    Wieso gibt deine Deklaration nicht auch einen bool Wert zurück, sondern einen int Wert? Wenn du darauf keine sinnvolle Antwort findest, dann begreifst du auch, was sich der Kompiler fragt 🙂

    Grüssli



  • Au, da hab' ich das Kleingedruckte nicht gelesen 🙂



  • Jo ! Vielen Vielen Dank ! habe es jetzt so gelöst :

    int isSchaltjahr(int jahr)
    {
    	if(jahr%4 == 0)
    		return true;
    	else
    		return false;
    }
    

    kleine Frage am Rande : Ist es Möglich das "true" bzw. "false" als Wort angezeigt wird ohne gleich an die if's zu müssen ?



  • Besser wäre es wohl deine Funktion wieder bool zurückgeben zu lassen (im Header und in der cpp).
    und ja, du kannst die Wörter true oder false ausgeben lassen. Dafür gibt es den Streammodifizierer boolalpha.

    std::cout << "\n" << boolalpha << isSchaltjahr(jahr);
    

    siehe auch
    http://www.cplusplus.com/reference/iostream/manipulators/boolalpha.html



  • fett ! Vielen Dank leutz ! Ihr seid echt der Hammer ! 👍



  • FedoX schrieb:

    ...

    ..."Gebe eine ...
    

    Übrigens (muss hier mal die Seuche brandmarken): Der Imperativ von "geben" lautet: "gib" !!
    Es heißt ja auch nicht "Er gebt eine Zahl ein"... 😉 (s.a. "unregelmäßige Verben")

    So auch:
    helfen -> hilf
    essen -> iss
    nehmen -> nimm
    ...

    Gruß,

    Simon2.



  • kürzeren code mit gleicher Funktionalität erhältst du mit:

    int isSchaltjahr(int jahr)
    {
        return (jahr%4 == 0);
    }
    


  • muffmolch schrieb:

    kürzeren code mit gleicher Funktionalität erhältst du mit:

    Und warum wieder die Rückgabe als int und nicht als bool?



  • Und da die richtige Schaltjahr-Rechnung immer noch nicht engekommen ist:

    Wirdbald schrieb:

    Volle Jahrhunderte sind auch keine Schaltjahre, es sei denn sie sind durch 400 teilbar


Log in to reply