unbekannte Fehlermeldung



  • danke, ja hab ich gemacht



  • hätte aber noch eine Frage: warum kommt genau bei allen int-Funktionen, die ich nach "zeichenfunktionen.cpp" auslagere, die Fehlermeldung "Bezeichner wurde nicht gefunden"???



  • das cin und cout und so wird in der iostream(header datei) definiert. und erst in den dateien (sei es *.h oder *.cpp) wo du eben diese iostream inkludierst, sind die bezeichner(bezeichner bedeutet namen von variablen, funktionen, etc.) bekannt. das heisst, du kannst in deine main.cpp iostream 5mal inkludieren. sie wird dennoch solange in zeichenfunktion.h (und auch .cpp) unbekannt bleiben, bis du sie auch dort inkludierst.

    wobei wenn du xXx.h in die A.h inkludierst, und diese A.h in deine A.cpp, dann ist xXx.h auch in A.cpp bekannt.
    für dein beispiel heisht das, include iostream in die zeichenfunktion.h und damit sollte sie in zeichenfunktion.cpp und in main.cpp bekannt sein

    normaler weise inkludiert man dateien in headerdateien, diese inkludiest du in die zugehörige cpp datei. aber es gibt ausnahmen z.B. bei zyklischen abhängigkeiten, aber das ist ein fall für später, wenn du mal drüber stolperst

    EDIT:jahh !! 1337 !


  • Mod

    Skym0sh0 schrieb:

    EDIT:jahh !! 1337 !

    😕

    Skym0sh0
    Mitglied
    
    Benutzerprofil
    Anmeldungsdatum: 22.03.2008
    Beiträge: [b]1226[/b]
    

    Oder kapiere ich gerade nicht, was du meinst?



  • uhrzeit des beitrags :>

    bissgen kindergarten wird doch wohl erlaubt sein 😉

    - Ein Kluger Mann findet immer Zeit für Dummheiten.



  • also ich habe jetzt die Funktionen int Mensch, int Computer und int ComputerStark nach zeichenfunktionen.h und zeichenfunktionen.cpp ausgelagert und in zeichenfunktionen.h iostream includiert und es kommt trotzdem noch die Fehlermeldung "Bezeichner wurde nicht gefunden"...



  • hast du auch in zeichenfunktion.cpp die zeichenfunktion.h eingebunden, also dass der iostream header weitergeleitet wird?

    wie sieht das mit dem std namespace aus?
    hast du entweder irgendwo using namespace std; (nicht so gute lösung) stehen?
    oder (bessere möglichkeit) nutzt du cout und so in verbindung mit std? also std::cout << ...



  • ich habe using namespace std; aber was ist so falsch daran (steht so in meinem Buch...)

    EDIT: ich habs jz mal anders probiert, funktioniert aber trotzdem nicht...



  • danielgott schrieb:

    EDIT: ich habs jz mal anders probiert, funktioniert aber trotzdem nicht...

    Also

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "Hello Wasweißich!\n";
    }
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello Wasweißich!\n";
    }
    

    Wo liegt das Problem? Ist im Endeffekt Stilfrage.



  • ja an sich ists egal, aber mit ungünstig gesetzten using direktiven hebelt man das komplette namespace system aus.



  • Skym0sh0 schrieb:

    ja an sich ists egal, aber mit ungünstig gesetzten using direktiven hebelt man das komplette namespace system aus.

    Es ging um die Fehlermeldung, ich mag dieses ausschütten genausowenig :xmas1:



  • ja und die ist noch immer da...



  • danielgott schrieb:

    ja und die ist noch immer da...

    Und lautet?
    Mein Gott, wie sollen wir dir ohne denn helfen?



  • danielgott schrieb:

    hätte aber noch eine Frage: warum kommt genau bei allen int-Funktionen, die ich nach "zeichenfunktionen.cpp" auslagere, die Fehlermeldung "Bezeichner wurde nicht gefunden"???



  • Wärst du so freundlich mal den Code hier her zu kopieren?
    Du scheinst irgendwas bei der Modulzerlegung falsch gemacht haben; ich kann mir aber auf deine Beiträge bisher keinen Reim machen was. Und meine Kristallkugel is schonwieder kaputt und so kann ich leider nicht sehen, wie dein Quellcode aussieht.



  • Ich hab die 3 Dateien mal upgeloedet, wobei die int-Funktionen, die nicht funktionieren, hier nicht ausgelagert sind,sondern direkt in der Datei "Zwölferspiel.cpp" stehen, weshalb beim Debuggen auch keine Fehlermeldung kommt
    http://uploaded.to/file/v76dwvwh



  • danielgott schrieb:

    Ich hab die 3 Dateien mal upgeloedet, wobei die int-Funktionen, die nicht funktionieren, hier nicht ausgelagert sind,sondern direkt in der Datei "Zwölferspiel.cpp" stehen, weshalb beim Debuggen auch keine Fehlermeldung kommt

    Wenn die Fehlermeldung nicht komm bringt das nicht viel, den Code hochzuladen. Bitte poste hier deinen Code, und zwar aufs wesentliche reduziert, aber trotzdem noch compilierbar und so, dass der Fehler reproduziert werden kann. Alles Andere hat wenig Sinn.



  • Keine Ahnung was du compilierst 😕

    Dein verlinkter Quelltext gibt ganz klar Fehlermeldungen aus 👍
    Aber du solltest die hier komplett zeigen ⚠

    Dann wird das auch was mit der Diagnose.

    Fehlermeldung eines anderen Compilers:
    ..\zeichenfunktionen.cpp|4|Error: undefined identifier 'Zeichenbrett'|

    Also kennt dein Compiler den Begriff 'Zeichenbrett' nicht.

    Bei der Header-Datei würde ich noch etwas einbauen, damit die nur einmal im Projekt geladen wird.

    MfG f.-th.



  • Nachtrag hab noch mal ein wenig im Netz gestöbert.
    Die Dateien die du hier verlinkst sind nur Teile eines grösseren Projektes aus dem Buch. Deshalb muss die von mir gezeigte Fehlermeldung nicht zutreffen!

    Ich weiss jetzt nicht ob das dich betrifft. Bei einer der Buchauflagen ist es zu einer Verwechselung von Dateiversionen gekommen und anderen Kleinigkeiten.

    Korrekturen siehe auf der Seite vom Buchautoren.

    MfG f.-th.



  • Ja das mit dem Zeichenbrett liegt daran, dass man eigentlich noch eine zusätzliche Datei einbiden mus,, sry hab ich vergessen, und das mit dem Quelltext wird schwer weil ich nicht weis wo iwas falsch sein könnte, da es ja ohne Auslagerung funktioniert, aber ich versuchs mal:

    Also in der Auslagerungsdatei steht u.a.:

    #include "zeichenfunktionen.h"
    int Mensch(int steine)
     {
    	 int anz;
    	 do
    	 {
    	   std::cout <<"Wie viele Steine möchtest du setzen???";
    	   std::cin>>anz;
    	 }while(!(anz==1||(anz==2&&steine<11)));
    	 return(anz);
     }
    
     int Computer(int steine)
     {
    	 if(steine==11)
    	 {
    		 return 1;
    	 }
    	 if(steine==10)
    	 {
    		 return 2;
    	 }
    	 return Mathemahotep::ErmittleZufallszahl(1,2);
     }
      int ComputerStark(int steine)
     {
    	 if(steine==2 || steine==5 || steine==8 || steine==11)
    	 {
    		 return 1;
    	 }
    	 if(steine==1 || steine==4 || steine==7 || steine==10)
    	 {
    		 return 2;
    	 }
    	 return Mathemahotep::ErmittleZufallszahl(1,2);
     }
    

    und in der Headerdatei:

    #include <iostream>
    using namespace std;
    

    int Mensch(int steine);
    int Computer(int steine);
    int ComputerStark(int steine);

    und in der Hauptdatei:

    int main()
    {
      Zeichenbrett::Oeffnen(700,200);
      Mathemahotep::HilfMir();
      int Schwierigkeitsgrad;
      cout<<"Wählen Sie den Schwierigkeitsgrad :"<<endl;
      cout<<"1=Einfach"<<endl;
      cout<<"2=Schwierig"<<endl;
      cin>>Schwierigkeitsgrad;
      int Beginn=Mathemahotep::ErmittleZufallszahl(1,2); 
      bool computer;
      if(Beginn==1)
      {
    	 computer=true;
      }
      else
      {
    	  computer=false;
      }
    
      int steine=0;
      do
      {
    	  ZeichneSpielfeld(steine);
    	  Zeichenbrett::FensterNachVorne();
    	  if(computer==true)
    	  {
    		  int anz;
    		  if(Schwierigkeitsgrad==1)
    		  {
    		   anz=Computer(steine);
    		  }
    		  else
    		  {
    			anz=ComputerStark(steine);
    		  }
    		  cout<<"Der Computer spielt ";
    		  cout <<anz<<" Stein(e)"<<endl;
    		  steine=steine+anz;
    	  }
    	  else
    	  {
    		  steine=steine+Mensch(steine);
    			  }
    			  if(steine<12)
    			  {
    				  computer=!computer;
    			  }
      }while(steine<12);
    
      ZeichneSpielfeld(steine);
    
      if(computer==true)
      {
    	  cout<<"Leider verloren"<<endl;
    	  Zeichenbrett::ZeichneText(225,140,"Gewinner:Computer",20);
      }
      else
      {
    	  cout<<"Du hast gewonnen!"<<endl;
    	  Zeichenbrett::ZeichneText(225,140,"Gewinner:DU!",20);
    	  Zeichenbrett::FensterNachVorne();
      }  
      cin.get();
    }
    

Anmelden zum Antworten