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



  • Ich denke die Überschrift sagt alles:

    ich bin schier am verzweifeln 😕 ... ich probiere nun schon seit ner Stunde rum wie ich den Methodenkopf für die übergabeparameter:

    (&CSP.MixedCardSet[32],&CSP.CardsRemains)
    

    gestalten muss

    am nächesten läge da natürlich:

    nameOfFunktion(Card& CSP.MixedCardSet[32],int& CardsRemains)
    

    nur da habe ich dann einen Linkererror 😕



  • Woher kommt den das?! Das sieht nämlich nicht wie ein Funktionsaufruf aus.

    (&CSP.MixedCardSet[32],&CSP.CardsRemains)

    Das bedeutet ja, dass du eine Adresse auf das 32-igste Element von MixedCardSet und eine Adresse auf von CardsRemains übergeben willst. Das macht so aber für mich keinen (logischen) Sinn. Ich denke mal eher, dass du da ein Array und einen Integer (?) übergeben willst.

    Das würde für mich mehr Sinn machen:

    nameOfFunktion(Card* array,int CardsRemains)
    

    Und Aufrufen kannst du das dann so:

    nameOfFunktion (CSP.MixedCardSet, CSP.CardsRemains)
    

    Zu beachten wäre da ber noch, dass du entweder die Grösse des Arrays übergeben musst, sofern sie zur Compile Zeit nicht bekannt ist.



  • Das müssen beides Referenzen sein, da es a) eine void ist und ich b) keine Arrays, geschweige denn 2 Werte zurück geben kann......



  • Jud4s schrieb:

    Das müssen beides Referenzen sein, da es a) eine void ist und ich b) keine Arrays, geschweige denn 2 Werte zurück geben kann......

    Was hat jetzt void und der Rückgabewert mit der Signatur der Funktion zu tun?



  • 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