Einfügen eines Char-Arrays in einen Vector



  • Ein guter Grund gegen std::string? Es ist nicht halb so männlich. 😉 😃



  • ok meinetwegen, ich hab aber bisher noch nie mit dieser Art von Strings gearbeitet:
    std::vectorstd::string daten;
    allein diese Deklaration erzeugt 4 Warnungen:

    C:\Dokumente und Einstellungen\Andy\Desktop\zrsgsg\dsfsdf.cpp(33) : warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<char>

    ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,int>' : identifier was truncated to '255' characters in the debug information
    C:\Dokumente und Einstellungen\Andy\Desktop\zrsgsg\dsfsdf.cpp(33) : warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std
    ::basic_string<char,std::char_traits<char>,std::allocator<char> > &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *,int>' : identifier was truncated to '255' characters in the debug information
    c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::
    vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information
    c:\programme\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::
    ~vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information

    Die ich ehrlich gesagt nicht verstehe. Hat er Probleme damit das "daten" ursprüglich mit einem char-Array verwendet wurde?
    Ich benutze Visual C++ 6.0, muss ich da irgendwelche Einstellungen ändern?

    Viele Grüße
    Andreas



  • Wie sieht denn dein Code jetzt aus mit den Fehlern?



  • Welche Fehler meinst du, das eben waren Warnungen.
    Der Code sieht im Moment einfach so aus:

    #include <iostream>
    #include <string>
    #include <vector>
    
    int main()
    {
    
    	//char acText[256];
    	std::vector<std::string> daten;
    	//for(int i = 0; i < 10; i++) 
    //	{
    		//sprintf(acText, "Zahl: %i", i);
    	//	daten.push_back(std::string(acText));
    	//}
    
    /*	for(std::vector<std::string>::iterator dIter2(daten.begin()); dIter2 != daten.end(); ++dIter2)
    	{
    		printf("%s\n", dIter2);
    	}*/
    
    	return 0;
    }
    


  • Zu den Warnungen:
    Mit C4786 sagt Dir der Compiler, dass einige Type- Namen zu lang für den Debugger sind. Dies kann getrost ignoriert werden.

    Gibt es einen speziellen Grund, dass Du VC6.0 verwendest?

    Simon



  • Warum fragst du, ist der so schlecht?



  • Die Warnungen kannst du ignorieren (diese beziehen sich nur auf die langen template-Namen, welches für's Debugging auf 255 Zeichen gekürzt werden).

    Du kannst die Warnungen beim MSVC auch folgendermaßen ausschalten:

    #pragma warning (disable: 4786)
    

    P.S. Der VC6.0 ist schon einige Jahre alt (1998?), und unterstützt nicht alle C++ Standard Features (z.B. bei Templates und Namespaces).
    Du kannst dir eine aktuelle Express-Version des Visual Studios bei MS runterladen.



  • Und ersetze printf(...) dann mal durch *std::cout << dIter2 << endl;



  • thx, ich hats jetzt so realisiert:

    char acText[256];
    	std::vector<std::string> daten;
    	for(int i = 0; i < 10; i++) 
    	{
    		sprintf(acText, "Zahl: %i", i);
    		daten.push_back(std::string(acText));
    	}
    
    	for(std::vector<std::string>::iterator dIter2(daten.begin()); dIter2 != daten.end(); ++dIter2)
    	{
    		printf("%s\n", dIter2->c_str());
    	}
    

    Um meinem Char-Array wenigstens etwas treu zu bleiben^^ 😃



  • Andreas_LL schrieb:

    ...allein diese Deklaration erzeugt 4 Warnungen:...

    Das liegt am extrem veralteten VC++ 6.0. Die Warnung C4786 kann aber getrost deaktiviert werden (Der VC++ 6.0 hat Probleme mit Templates).

    Andreas_LL schrieb:

    Die ich ehrlich gesagt nicht verstehe.

    Die Warnungen sind auch wie gesagt nur auf ein Fehler im VC++ 6.0 zurückzuführen.

    Andreas_LL schrieb:

    Ich benutze Visual C++ 6.0, muss ich da irgendwelche Einstellungen ändern?

    les dir mal die "#pragma warning" - Direktive in der MSDN durch.

    Davon ganz abgesehen: Wenn du nicht wegen der Arbeit oder so gezwungen bist mit dem VC++ 6.0 zu arbeiten solltest du ihn dringens ersetzen. Sei es in dem du auf den kostenlosen VC++ 2008 Express oder irgendeinen anderen aktuellen Compiler umsteigst.

    VC++ 6.0 hat mehrere Probleme mit dem C++ Standard, wo das nur die Kleinste (wenn auch eine ziemlich nervige) Auswirkung ist. Ich weiß z.B. nicht wie du Zeiger nach allozierung mit new prüfst. In VC++ 6.0 wird unter den Standardeinstellungen 0 zurückgegeben, der Standard verlangt aber eine Exception (kann man aber umstellen, steht irgendwo unter new beschrieben).

    cu André



  • Andreas_LL schrieb:

    thx, ich hats jetzt so realisiert:
    ...
    Um meinem Char-Array wenigstens etwas treu zu bleiben^^ 😃

    Was willst du eigentlich Programmieren: C oder C++?

    printf & co sind nicht typsicher, Fehler werden in der Regel erst zur Laufzeit sichtbar...

    std::cin und std::cout sowie die Streamklassen insgesamt sind in der Regel die bessere Alternative.

    cu André


Anmelden zum Antworten