suche richtigen MethodenKopf für übergabeparameter: (&CSP.MixedCardSet[32],&CSP.CardsRemains)



  • ich gebe zu meine Argumentation war ein bischen ungenau... ich probiere es anders:

    ich muss direkt auf die Daten der "Orginaldatei" zugreifen können, da die sich innerhalb der Prozedur ändern. Rückgabe geht nicht, da ich einen Array habe, und ich so oder so wenn 2 Rückgabewerte hätte. Das mit void war Schwachsinn, da die Funktion zwangsläufig void ist wenn sie keinen Rückgabewert hat....



  • Weshalb willst du das Array dauernd mit Referenzen übergeben?
    Mach doch einfach eine gewöhnliche Übergabe als Zeiger, dann kannst du das Array innerhalb der Funktion genau gleich (bis auf die Grösseninformation) nutzen wie ausserhalb. Und sonst gibst du die Grösse als zusätzlichen Parameter mit.



  • aja... oO

    for(;;)
         {
               bool tryorend = true;
               for(int i = 0; i < 4; i++)
               {
                       Card temp;
                       if(Deck[i].priority > Deck[i+1].priority)            //NICHT LÖSCHEN
                       {
                                   tryorend = false;
                                   temp = Deck[i+1];
                                   Deck[i+1] = Deck[i];
                                   Deck[i] = temp;
                       };
               };
         if(tryorend) break;
        } ;
    

    wie soll ein vergleichbarer Code mit einem Zeiger funktionieren?

    und selbst wenn ich es probiere...

    //Aufruf
    User.changecards(CSP.MixedCardSet,CSP.CardsRemains)
    
    //auch das klappt nicht -> User.changecards(CSP.MixedCardSet[0],CSP.CardsRemains)
    
    //Funktion
    void changecards(Card* Cadset,int& Cardsremain)
    {};
    

    ...bekomme ich einen Linkererror von meinem Compiler ausgegeben 😕



  • Dann zeig doch bitte mal GENAUEN Code.

    Zum Beispiel was CSP genau definiert ist.
    Hilfreich wäre auch noch die Fehlermeldung, die du bekommst.
    Der gezeige Funktionsaufruf und die Definition hängen ja nichteinmal zusammen.
    Du rufst da ja anscheinend eine Memberfunktion auf und du definierst eine globale Funktion?!

    Zu Referenzen. Grundsätzlich kann man alles, was man mit Referenzen tun kann irgendwie auch mit Zeigern direkt tun. Bei deinem Code sehe ich nicht, wo da Zeiger/Referenzen arbeiten. Aber wenn man einen Zeiger dereferenziert, kann man eigentlich das machen, was man mit einer Referenz macht auch tun.

    foo* p;
    
    (*p).member ();
    (*p)[2];
    usw.
    


  • bewerft mich mit Dreck... lasst mich auspeitschen... ist mir egal... soviel Dummheit darf nciht sein 🙄 ich habe den Fehler gefunden 😕 nix mit linkererror -.- es lag einfach daran das cih bein schreiben der Funktion

    void funktionsname()/.... hatte ....
       //...und nicht....
         void Player::funktionsname()
    

    *autsch* ich weiss.... wieso bemerke ich son scheiss eigtl erst nach 2 Stunden oder mehr...



  • Jud4s schrieb:

    *autsch* ich weiss.... wieso bemerke ich son scheiss eigtl erst nach 2 Stunden oder mehr...

    Das ist mir auch schon oft passiert, aber nach dem Anschauen der Fehlermeldung habe ich den Fehler eigentlich immer gefunden. Fehlermeldungen genau zu lesen würde ich dir auch empfehlen.. 😉



  • oO... tuh ich ja... ich finde im Regelfall dann auch den Fehler... nur die Meldung Linkererror... "no reference to..." hat mir in diesem Falle nix gebracht... 😞



  • Bei Linkerfehlern dieser Art kann man sehr häufig auf eine nicht definierte Memberfunktion oder ein sonstiges Symbol schliessen, das dem Linker fehlt. Meistenst steht dann auch "Undefined reference to ...", wobei ... dann Auskunft darüber gibt, wo das Problem liegt.



  • jezz kenne ich ja diese Art von Fehler meldungen oO...
    ich habe auhc das Problem an einer völlig flaschen Stelle gesehen. Ich dachte der Compiler würde meine Übergabeparameter nicht kapieren.... und habe deswegen verzweifelt versucht diese zu modifizieren, an einen dämlcihen Syntaxfehler habe ich kaum gedacht... mir ist es auch nur per zufall aufgefallen als ich die Funktion von Grundauf neu schreiben wollte und ich merkte das das "Player::" vor dem Funktionsnamen fehlte... *Kopf -> Tisch*

    Nochmals vielen Dank für eure Hilfe



  • Jud4s schrieb:

    bewerft mich mit Dreck... lasst mich auspeitschen... ist mir egal... soviel Dummheit darf nciht sein 🙄 ich habe den Fehler gefunden 😕 nix mit linkererror -.- es lag einfach daran das cih bein schreiben der Funktion

    void funktionsname()/.... hatte ....
       //...und nicht....
         void Player::funktionsname()
    

    *autsch* ich weiss.... wieso bemerke ich son scheiss eigtl erst nach 2 Stunden oder mehr...

    Ich komm nicht umher mich selber mal noch zu quoten:

    drakon schrieb:

    Du rufst da ja anscheinend eine Memberfunktion auf und du definierst eine globale Funktion?!

    Das nächste mal, wäre es ev. auch angebracht die Vorschläge hier aus dem Forum genau zu lesen. 😉


Anmelden zum Antworten