Warum funktioniert hier das "sizeof" nicht?



  • #include <iostream>
    #include <iomanip>
    #include <windows.h>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string a;
        getline( cin, a );
        cout << a;
        system("pause");
    }
    


  • David_pb schrieb:

    #include <iostream>
    #include <iomanip>
    #include <windows.h>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string a;
        getline( cin, a );
        cout << a;
        system("pause");
    }
    

    Klappt nicht:

    error C2040: 'a': 'std::string' unterscheidet sich von 'char *' in Bezug auf die Anzahl vorgenommener Dereferenzierungen
    error C2088: '<<': Ungültig für class
    


  • #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string a;
    	cin >> a;
    	for(string::const_iterator i = a.begin(); i != a.end(); ++i)
    	{
    		cout << *i;
    	}
    }
    


  • skullyan schrieb:

    David_pb schrieb:

    #include <iostream>
    #include <iomanip>
    #include <windows.h>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string a;
        getline( cin, a );
        cout << a;
        system("pause");
    }
    

    Klappt nicht:

    error C2040: 'a': 'std::string' unterscheidet sich von 'char *' in Bezug auf die Anzahl vorgenommener Dereferenzierungen
    error C2088: '<<': Ungültig für class
    

    Klappt schon... Nur kannst du nicht davon ausgehen das merkwürdig zusammengefügter Code immer noch funktioniert.



  • David_pb schrieb:

    skullyan schrieb:

    David_pb schrieb:

    #include <iostream>
    #include <iomanip>
    #include <windows.h>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string a;
        getline( cin, a );
        cout << a;
        system("pause");
    }
    

    Klappt nicht:

    error C2040: 'a': 'std::string' unterscheidet sich von 'char *' in Bezug auf die Anzahl vorgenommener Dereferenzierungen
    error C2088: '<<': Ungültig für class
    

    Klappt schon... Nur kannst du nicht davon ausgehen das merkwürdig zusammengefügter Code immer noch funktioniert.

    Ja, mein Compiler hat mir da einen Streich gespielt.



  • Registrierter Troll schrieb:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string a;
    	cin >> a;
    	for(string::const_iterator i = a.begin(); i != a.end(); ++i)
    	{
    		cout << *i;
    	}
    }
    

    Diese Lösung gefällt mir, allerdings brauche ich auch eine Lösung für getline() . Wenn ich einen Satz eingebe, wird nur das erste Wort ausgegeben. Also die Ausgabe erfolgt nur bis zum ersten Leerzeichen.



  • skullyan schrieb:

    Diese Lösung gefällt mir, allerdings brauche ich auch eine Lösung für getline() .

    Kannst du nicht selber ein wenig kombinieren, muss dir alles wortwörtlich vorgesetzt werden?

    Wenn du dich ein wenig bemühst, findest du bestimmt eine gute Erklärung auf www.cplusplus.com. Zusammen mit den Codeteilen hier sollte es kein Problem mehr sein, das umzusetzen.



  • char* a = new char[];
    cin >> a;

    Also ich bin mir nicht sicher, aber das kann doch auch nicht funktionieren,
    weil a kein dynamisches Array ist, dass sich automatisch vergrößert, oder?
    Wenn Du die Klammern leer lässt, dann passt sich das Array immer dem an, was du direkt danach zuweist?!

    Irre ich mich oder habe ich recht?

    lg, freakC++



  • freakC++ schrieb:

    char* a = new char[];
    cin >> a;

    Also ich bin mir nicht sicher, aber das kann doch auch nicht funktionieren,
    weil a kein dynamisches Array ist, dass sich automatisch vergrößert, oder?
    Wenn Du die Klammern leer lässt, dann passt sich das Array immer dem an, was du direkt danach zuweist?!

    Irre ich mich oder habe ich recht?

    lg, freakC++

    Wie Registrierter Troll schon sagte, der Code ist so nicht in Ordnung.
    Wenn du mit dem zweiten Teil das hier meinst:

    char a[] = "Hallo"; // a hat danach die Länge 6
    

    Dann liegst du damit auch richtig.



  • Registrierter Troll schrieb:

    Das ist aber kein Grund gleich zu schreien.

    Schreien tut man mit den Stimmbändern.



  • Ruhiger Mensch schrieb:

    Registrierter Troll schrieb:

    Das ist aber kein Grund gleich zu schreien.

    Schreien tut man mit den Stimmbändern.

    Sag das nicht!


Anmelden zum Antworten