cout nicht deklarierter bezeichner trotz using namespace std oO



  • Hallo,

    ich finde meinen Fehler absolut nicht.. ich bekomme folgende Fehlermeldung:

    1>------ Erstellen gestartet: Projekt: Mastermind, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>MastermindDigits.cpp
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(38) : warning C4244: 'Argument': Konvertierung von 'time_t' in 'unsigned int', möglicher Datenverlust
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(59) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(59) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(94) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(94) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(95) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(95) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(102) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(102) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(111) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(111) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(119) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(119) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(126) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(126) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(141) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(141) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(146) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(146) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(154) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(154) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(161) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(161) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(161) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(171) : error C2600: 'MastermindDigits::operator =': Vom Compiler generierte spezielle Memberfunktion kann nicht definiert werden (vorherige Deklaration in der Klasse erforderlich)
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(172) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1> Diese Diagnose trat in der vom Compiler generierten Funktion "MastermindDigits &MastermindDigits::operator =(const MastermindDigits &)" auf.
    1>d:\documents\visual studio 2008\projects\mastermind\mastermind\masterminddigits.cpp(172) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1> Diese Diagnose trat in der vom Compiler generierten Funktion "MastermindDigits &MastermindDigits::operator =(const MastermindDigits &)" auf.
    1>Code wird generiert...
    1>Kompilieren...
    1>main.cpp
    1>Code wird generiert...
    1>Das Buildprotokoll wurde unter "file://d:\Documents\Visual Studio 2008\Projects\Mastermind\Mastermind\Debug\BuildLog.htm" gespeichert.
    1>Mastermind - 26 Fehler, 1 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Meine Quelldateien:

    Mastermind.h

    #ifndef __MASTERMINDDIGITS_H
    #define __MASTERMINDDIGITS_H
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    
    class MastermindDigits
    {
       public:
          MastermindDigits(int);
    	  MastermindDigits(const MastermindDigits & k);
          ~MastermindDigits();
          void makeDigitsToGuess(void);
          int locationRight(MastermindDigits);
          int locationWrong(MastermindDigits);
          operator int();
    
       private:
          int * digits;
    };
    #endif
    

    Mastermind.cpp

    #include "MastermindDigits.h"
    #define DEBUG
    using namespace std;
    MastermindDigits::MastermindDigits(int num) 
    { 
    
       digits = new int[4];
       if(num==0 || num < 1111 || num > 6666)
          makeDigitsToGuess();
       else
       {
          digits[0] = num / 1000;
          digits[1] = num / 100 % 10;
          digits[2] = num / 10 % 10;
          digits[3] = num % 10;
       }
    
    }
    
    MastermindDigits::MastermindDigits(const MastermindDigits & k)
    {
       digits = new int[4];
       digits[0] = k.digits[0];
       digits[1] = k.digits[1];
       digits[2] = k.digits[2];
       digits[3] = k.digits[3];
    
    }
    
    MastermindDigits::~MastermindDigits() 
    { 
       //cout << "KILLING!"<<endl;
       delete [] digits;
    
    }
    void MastermindDigits::makeDigitsToGuess(void)
    {
       srand(time(0));
       for(int i = 0; i < 4; i++)
          digits[i] = rand() %6 +1;
    
    }
    
    int MastermindDigits::locationRight(MastermindDigits k) 
    { 
       int rval = 0;
    
       for(int i =0; i < 4; i++)
       {
          if (k.digits[i] == digits[i])
    	 rval++;
       }
       return rval;
    }
    int MastermindDigits::locationWrong(MastermindDigits k) 
    { 
    #ifdef DEBUG
       cout << "--- DEBUG ---" << endl;
    #endif
       bool already;
       int chkpos = 0;
       int dontCheck[4] = {0,0,0,0};
       int inK;     //count how many times the digit is found in array of K
       int inThis; //count how many times digit is in *this array
       int locationWrong = 0; //this stores the final number we return when done
       int found = 0;	   //this stores how often our digit is in our objects digit array
       int tmp;	     //holds the digit we are looking for
       int max;
       int foundR = 0;
    
       for(int loop=0;loop<4;loop++)
       {
          inThis= 0;
          inK = 0;
          found = 0;
          foundR = 0;
          tmp = digits[loop];	    //take a digit out of array
    
          for(int c=0;c<4;c++)	    //did we already check for it?
    	 if(tmp==dontCheck[c])
    	    already=true;
    
          if(!(already))
          {
    	 for(int i=0;i<4;i++)
    	 {
    	    if(tmp == digits[i])	 //how many times is digit in our array
    	       inThis++;
    	    if(tmp == k.digits[i])	 //how many times is digit in the K array 
    	       inK++;
    	 }
    #ifdef DEBUG
    	 cout << tmp << " ist " << inThis << " mal in " << *this << endl;
    	 cout << tmp << " ist " << inK << " mal in " << k << endl;
    #endif
    	 if(inK < inThis)
    	    max = inK;
    	 else
    	    max = inThis;
    #ifdef DEBUG
    	 cout << "max resultat = " << max << endl;
    #endif
    
    	 for(int loop2=0; loop2<4;loop2++)	  //check how many times digit is in k array
    	 {
    	       if((k.digits[loop2] == tmp) && digits[loop2] != tmp)
    	       {
    		  found++;
    #ifdef DEBUG
    		  cout << tmp << " gefunden. resultat + 1 " << endl;
    #endif
    	       }
    	       if((k.digits[loop2] == tmp) && digits[loop2] == tmp)
    	       {
    		  //found--;
    		  foundR++;
    #ifdef DEBUG
    		  cout << tmp << " an gleicher stelle gefunden. endresultat - 1 " << endl;
    #endif
    	       }
    	 }
    	 if(found > max)
    	 {
    #ifdef DEBUG
    		  cout << found << " > als " << max << ". resultat = " << max << endl;
    #endif
    	    found = max;
    
    	 }
    	 if(foundR > 0)
    	 {
    	    found = found - foundR;
    	 }
    	 if(found < 0)
    	 {
    	    found = 0;
    	 }
    	 locationWrong += found;
    #ifdef DEBUG
    		  cout << "endresultat = " << locationWrong << endl; 
    #endif
    	 dontCheck[chkpos] = tmp;	    //put it in dontCheck list, so we dont check for it again
    	 chkpos++;			    //increment chkpos, so we put next digit in a differen place in array
    #ifdef DEBUG
    		  cout << "Lege " << tmp << " in dontCheck List" << endl;
    #endif
    
          }
          else
          {
    	 already=false;
    #ifdef DEBUG
    	 cout << tmp << " in dontCheck Liste." << endl;
    #endif
          }
       }
    
    #ifdef DEBUG
       cout << "---END DEBUG ---" << endl << endl;
    #endif
       return locationWrong;
    }
    MastermindDigits::operator int()
    {
      return digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];	
    }
    
    MastermindDigits& MastermindDigits::operator=(const MastermindDigits& op)
    {
       cout << "= OPERATOR" << endl;
       if(this==&op)
          return *this;  //Schutz vor selbstzuweisung
    
       digits = new int[4];
       digits[0] = op.digits[0];
       digits[1] = op.digits[1];
       digits[2] = op.digits[2];
       digits[3] = op.digits[3];
    
       return *this;
    
    }
    

    main.cpp

    #include "MastermindDigits.h"
    #include <iostream>
    using std::cout;
    using std::cin;
    using std::endl;
    
    #define M MastermindDigits
    
    int main()
    {
    
       int eingabe;
       int Rval=0;
       int Wval=0;
       int tries = 8;
       bool goodInput = false ;
       bool testmode = false;
       cout
         << endl << endl 
          << "MasterMind!"
          << endl << endl;
       while(!(goodInput))
       {
          cout
          << "Geben Sie eine Zahl zwischen 1111 und 6666 ein fuer Testmodus" 
          << endl
          << "oder 0 fuer ein Spiel"
          << endl 
          << "-> ";
       cin >> eingabe;
       if((eingabe==0) ||( eingabe > 1111) && (eingabe < 6666))
          goodInput=true;
       }
       if(eingabe!=0)
       {
          cout 
    	 << "Testmodus!" << endl
    	 << "Die Zahl ist " << eingabe << endl;
          testmode = true;
       }
       else
       {
          cout 
    	 << endl 
    	 << "Das Spiel beginnt!"
    	 << endl;
       }
       MastermindDigits guessme(eingabe);
       while(Rval!=4 && tries > 0)
       {
          goodInput=false;
          if(!testmode)
          {
    	 if(tries > 1)
    	    cout << "Sie haben noch " << tries << " Versuche" << endl << endl;
    	 else
    	    cout << "Sie haben noch einen letzten Versuch!" << endl << endl;
          }
          while(!(goodInput))
          {
    	 if(testmode)
    	    cout
    	       << "Testmodus!" << endl
    	       << "Zahl ist " << guessme << endl;
    
    	 cout << "Was raten Sie: ";
    	 cin >> eingabe;
    	 if(eingabe > 6666 || eingabe < 1111)
    	 {
    	    goodInput = false;
    	    cout << "Zahl muss zwischen 1111 und 6666 liegen" << endl;
    	 }
    	 else
    	    goodInput=true;
          }	
          Rval = guessme.locationRight(M (eingabe));
          Wval = guessme.locationWrong(M (eingabe));
          cout 
    	 << "Sie raten: " << eingabe 
    	 << " Computer antwort: " << Rval << " an der richtigen Stelle; sonst " <<Wval<<" richtig"
    	 << endl;
    
          if(!(testmode))
    	 tries--;
       }
       cout << endl;
       if(Rval==4)
          cout 
    	 << "Sie haben gewonnen!" << endl;
       else
          cout 
    	 << "Sie haben verloren!" << endl;
    
          cout << "Die richtige Antwort war: " << guessme << endl;
    
     /*
    
       MastermindDigits obj1 = MastermindDigits(1234);
       MastermindDigits obj2(2345);
    
       obj2 = obj1;
       cout << "Obj1 " << obj1 << endl << "Obj2 " << obj2 << endl;
    */
       return 0;
    }
    

    Ich hab auch schon versucht das using namespace std nur in der header datei zu haben, hab sie mal hier entfernt mal dort hinzugefügt.... aber er will einfach nicht...

    Was überseh ich denn ich hab schon hundertmal so mit cout gearbeitet, also using namespace std und nur cout oO



  • also entweder du inkludierst noch in den Files, in welchen du Elemente von iostream verwendest, iostream, also in MastermindDigits.h ( bzw MastermindDigits.cpp, da du nur dort cout verwendest), oder stellst die include-Reihenfolge in main.cpp so um, dass dort zuerst iostream inkludiert wird und dann MastermindDigits. Aber ich würde den Weg vorschlagen, es dort zu inkludieren, wo es wirklich gebraucht wird.



  • Das using aus den Headern wegmachen, das ist nix gut. Und dann natürlich in Mastermind.cpp die <iostream> einbinden.


Anmelden zum Antworten