Immer mehr private bytes :(



  • struct joinedPlayer
    	{
    		std::string ip;
    		std::string id;
    	}; joinedPlayer joinedPlayer[64];
    

    Hier fange ich doch nichts mit std::fill an?



  • Hello schrieb:

    struct joinedPlayer
    	{
    		std::string ip;
    		std::string id;
    	}; joinedPlayer joinedPlayer[64];
    

    Hier fange ich doch nichts mit std::fill an?

    Falsch. Hier fängst du nichts mit 0 an.

    Edit:
    Du kannst die Initialisierung von ip und id über einen Konstruktor steuern.



  • Nun, dann werde ich mal alles zu vectoren umbauen...



  • Hey!

    struct joinedPlayer
    	{
    		std::string ip;
    		std::string id;
    	}; std::vector<joinedPlayer> joinedPlayer;
    
    	std::fill(joinedPlayer.begin(), joinedPlayer.end(), 0);
    

    Funktioniert nicht.

    1>------ Build started: Project: SlowBob, Configuration: Release Win32 ------
    1>Compiling...
    1>SlowBob.cpp
    1>C:\Programme\Microsoft Visual Studio 8\VC\include\xutility(2726) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const int' (or there is no acceptable conversion)
    1>        e:\c++\gold\slowbob\slowbob\SlowBob.h(51): could be 'SlowBob::oldJoinedPlayer &SlowBob::oldJoinedPlayer::operator =(const SlowBob::oldJoinedPlayer &)'
    1>        while trying to match the argument list '(SlowBob::oldJoinedPlayer, const int)'
    1>        C:\Programme\Microsoft Visual Studio 8\VC\include\xutility(2754) : see reference to function template instantiation 'void std::_Fill<std::_Vector_iterator<_Ty,_Alloc>,int>(_FwdIt,_FwdIt,const int &)' being compiled
    1>        with
    1>        [
    1>            _Ty=SlowBob::oldJoinedPlayer,
    1>            _Alloc=std::allocator<SlowBob::oldJoinedPlayer>,
    1>            _FwdIt=std::_Vector_iterator<SlowBob::oldJoinedPlayer,std::allocator<SlowBob::oldJoinedPlayer>>
    1>        ]
    1>        .\SlowBob.cpp(52) : see reference to function template instantiation 'void std::fill<std::_Vector_iterator<_Ty,_Alloc>,int>(_FwdIt,_FwdIt,const int &)' being compiled
    1>        with
    1>        [
    1>            _Ty=SlowBob::oldJoinedPlayer,
    1>            _Alloc=std::allocator<SlowBob::oldJoinedPlayer>,
    1>            _FwdIt=std::_Vector_iterator<SlowBob::oldJoinedPlayer,std::allocator<SlowBob::oldJoinedPlayer>>
    1>        ]
    1>C:\Programme\Microsoft Visual Studio 8\VC\include\xutility(2726) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const int' (or there is no acceptable conversion)
    1>        e:\c++\gold\slowbob\slowbob\SlowBob.h(57): could be 'SlowBob::joinedPlayer &SlowBob::joinedPlayer::operator =(const SlowBob::joinedPlayer &)'
    1>        while trying to match the argument list '(SlowBob::joinedPlayer, const int)'
    1>        C:\Programme\Microsoft Visual Studio 8\VC\include\xutility(2754) : see reference to function template instantiation 'void std::_Fill<std::_Vector_iterator<_Ty,_Alloc>,int>(_FwdIt,_FwdIt,const int &)' being compiled
    1>        with
    1>        [
    1>            _Ty=SlowBob::joinedPlayer,
    1>            _Alloc=std::allocator<SlowBob::joinedPlayer>,
    1>            _FwdIt=std::_Vector_iterator<SlowBob::joinedPlayer,std::allocator<SlowBob::joinedPlayer>>
    1>        ]
    1>        .\SlowBob.cpp(53) : see reference to function template instantiation 'void std::fill<std::_Vector_iterator<_Ty,_Alloc>,int>(_FwdIt,_FwdIt,const int &)' being compiled
    1>        with
    1>        [
    1>            _Ty=SlowBob::joinedPlayer,
    1>            _Alloc=std::allocator<SlowBob::joinedPlayer>,
    1>            _FwdIt=std::_Vector_iterator<SlowBob::joinedPlayer,std::allocator<SlowBob::joinedPlayer>>
    1>        ]
    1>Main.cpp
    1>Build log was saved at "file://e:\C++\Gold\SlowBob\SlowBob\Release\BuildLog.htm"
    1>SlowBob - 2 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    


  • Kann ja auch nicht. Genau lesen hilf meistens. In diesem Fall den letzten Beitrag von Konstruktör.



  • Hey!

    Ich möchte es doch bei einer Struktur belassen.

    Es wird doch eine Möglichkeit geben, jedes Element von joinedPlayer auf 0 zu setzen?!

    MfG



  • Nein. Du kannst einen String nicht auf 0 setzen. Du kannst ihn höchstens auf einen String der Länge 0 setzen. Das ist aber etwas anderes als die integer-Zahl 0.

    Wenn in deinem Vektor keine Integer liegen, mußt du beim dritten Argument von std::fill eben ein Objekt des Elementtyps übergeben, das deinen Vorstellungen von "0" entspricht.



  • Oh oh natürlich 😞 Ned mitgedacht sorry. Ich probiers mal mit " ".



  • Ne, kommen nur noch mehr Fehler...



  • Hello schrieb:

    struct joinedPlayer
    {
        std::string ip;
        std::string id;
    }; joinedPlayer joinedPlayer[64];
    

    Hello schrieb:

    Ich möchte es doch bei einer Struktur belassen.

    struct joinedPlayer
    {
        joinedPlayer() : ip(" "), id("0") {}
        std::string ip;
        std::string id;
    }; joinedPlayer joinedPlayer[64];
    


  • Aha!

    Nun, und wie setze ich dann während der Laufzeit std::string auf " "?

    MfG



  • Damit meine ich natürlich

    struct oldJoinedPlayer
    	{
    		std::string ip;
    		std::string id;
    	}; std::vector<oldJoinedPlayer> oldJoinedPlayer;
    

    Jedes Elemennt eines jeden oldJoinedPlayer Objekts auf " " setzen.



  • Hello schrieb:

    Nun, und wie setze ich dann während der Laufzeit std::string auf " "?

    Indem Du keine Literalkonstanten benutzt, sondern " " zur Laufzeit irgendwoher einliest und dann einen parametrisierten Konstruktor, oder den Zuweisungsoperator verwendest.



  • Hey!

    Geht es denn nicht einfacher?

    MfG



  • Ich möchte die string-Elemente immer wieder "leeren". Muss ich da dann doch eine Klasse draus machen, eine Memberfunktion schreiben und immer wieder für alle Elemente aufrufen?



  • Nein, du mußt die std::fill-Funktion verwenden, wie ich dir schon geschrieben habe. Und wenn du die Fehlermeldungen, die du bekommen hast, hier gepostet hättest, dann hätte man dir damit auch längst helfen können. Ich könnte deswegen schon wieder ausrasten, aber das habe ich gerade in einem anderen Thread getan. Also lassen wir es.



  • Ein struct darf auch Memberfunktionen haben.

    struct oldJoinedPlayer
    {
        oldJoinedPlayer()
        {
            init();
        }
    
        void init()
        {
            ip = "";
            id = "";
        }
    
        std::string ip;
        std::string id;
    }; std::vector<oldJoinedPlayer> oldJoinedPlayer;
    

    Dann std::fill verwenden, wie Z2 es schon beschrieben hat.



  • Herst ich hab die Fehlermeldung doch gepostet, als ich std::fill verwenden wollte.



  • Sieht für mich relativ überflüsig aus. Ein std::string ist bei seiner Konstruktion bereits ein leerer String.



  • Hmm versteh ich ned!

    Also was jetzt, init() oder std::fill? Warum beides?


Anmelden zum Antworten