Finde meinen Fehler nicht beim Ausgeben der Wahrheitstabelle



  • Hi Leute,

    habe eine Funktion geschrieben die mit eine Wahrheitstabelle ausgeben soll.
    Doch mein Compiler bringt mir beim Übersetzen folgende Fehlermeldung:

    undefined reference to ´verknuepfung(bool,bool)´

    Habe keine Ahnung was ich hier vergessen habe oder was mir fehlt, vielleicht kann mir jemand einen Tipp geben.

    Hier mein Quelltext:

    #include <stdio.h>
    #include<string>
    #include<iostream>
    
    using namespace std;
    
    string verknuepfung(bool, bool);
    
    main ()
    {
      int i;
      bool a,b;
    
      for (i = 0; i < 4; i ++)
        verknuepfung (i / 2, i % 2);
    
        printf ("%i  %i | %i\n", a, b, a && b);
    }
    

    Danke für Eure Hilfe



  • Ganz doof gefragt: Hast Du verknuepfung implementiert? Wenn ja, wo?



  • Die Meldung kommt nicht vom Compiler sondern vom Linker. Und wie man sieht, ist die Funktion verknuepfung deklariert, aber scheinbar nirgendwo definiert. Bzw. die Datei in der sie definiert ist, wird nicht gelinkt. Das kompiliert dann zwar, aber der Linker meckert, dass er keine Definition der Funktion finden kann.



  • OK schonmal danke für die schnellen Antworten. Jetzt bin ich nur ein wenig überfragt da ich noch nicht so lange im C++ Geshäft bin.

    Wie kann ich den Fehler nun beheben? Also wie und wo kann ich die verknuepfung definieren?



  • Na ja, weißt Du, was eine Funktion ist? Die kriegt etwas rein, führt etwas aus und gibt ggf. etwas zurück. WAS sie tut und WAS sie zurückgibt, musst Du natürlich selbst bestimmen. Googlesuche nach "C++ Funktionsdefinition" und vermutlich ein gutes Buch werden Dir nützliche Dienste erweisen.



  • Im einfachsten Fall schreibst Du die Definition einfach über der main Funktion

    #include<string> 
    #include<iostream> 
    
    string verknuepfung(bool, bool)
    {
      return "hallo";
    }
    
    main () 
    { 
      verknuepfung (i / 2, i % 2);   
    }
    

    Wenn das Programm etwas umfangreicher wird, lagert man sowas normalerweise in separate Dateien aus. Dabei schriebt man die Deklarierung in eine Headerdatei und die Definition in eine Quelldatei. Durch inkludeiren der Headerdatei, bekommst Du die Deklaration in andere Dateien, z.B. in deine main.cpp, in der deine main Funktion ist.

    // headerdatei verknueopfung.hpp  
    #include <string>
    std::string verknuepfung(bool, bool);  // Die Funktion deklarieren
    
    // quelldatei verknuepfung.cpp
    #include "verknuepfung.hpp"
    std::string verknuepfung(bool a, bool a)  // Die Funktion definieren
    {
      std::string result;
      // ...
      return result:
    }
    
    // quelldatei main.cpp
    #include "verknuepfung.hpp"
    
    int main()
    {
      verknuepfung(true, false);  // compiler ok, habe davon eine Deklaration gesehen.
    }
    

    Du musst dann die main.cpp und verknuepfung.cpp kompilieren und zum Programm zusammenlinken. Diese Sachen werden normalerweise von der IDE gemacht wenn Du "Build" oder etwas ähnliches drückst.



  • OK danke ich werd mich mal schlau machen. zumindest weiß ich jetzt an was es liegt und kann gezielt danach schauen.

    Gruß



  • So habe mich nun ein wenig schlau gemacht aber so richtig will das nicht funktionieren. Jetzt kennt er zwar den Prototypen aber die Ausgabe ist nun falsch.

    mit folgendem Quelltext

    #include<string>
    #include<iostream>
    
    using namespace std;
    
    string verknuepfung(bool, bool)
    {
      return "hallo";
    }
    
    main ()
    {
      int i;
      bool a,b;
    
      for (i = 0; i < 4; i ++)
      {
        verknuepfung (i / 2, i % 2);
        printf ("%i  %i | %i\n", a, b, !a && b);
      }
    
      return 0;
    }
    

    Habe ich eine Ausgabe bei der a immer 0 ist, b immer 34 und das Ergebnis der Verknüpfung ist "1", was ja ansich richtig ist.

    Bitte um Hilfe.

    Und noch eine Frage weil ich dazu nichts wirklich finde, was bedeutet das return "Hallo" oben unter der string verknuepfung...?



  • sei mir bitte nicht böse, aber du solltest dir erstmal ein gutes Buch nehmen und dir die Grundlagen von C++ aneignen. So hat es einfach keinen Sinn, dir zu helfen.



  • Scriptlaie schrieb:

    Und noch eine Frage weil ich dazu nichts wirklich finde, was bedeutet das return "Hallo" oben unter der string verknuepfung...?

    Dass die Funktion nicht das macht, was sie soll sondern dir als Rückgabewert "Hallo" liefert. Das war der kleine Wink mit dem Zaunpfahl, dass du das innere der Funktion gefälligst selbst anhand deiner Aufgabenstellung implementieren sollst.


Anmelden zum Antworten