Array von Zeigern auf Objekte an Funktion übergeben



  • void main()
    {
    
    theKlasse * theArray[20];  //ein Array von Pointern auf Objekte von theKlasse
    
    if (int i=0;i<20;i++)
    {
    pObjekt * new klasse;      //Ponter auf Objekte der Klasse im heap
    myarray[i]=pklasse;        //Ein Array, das die 20 Adressen der Objekte aufnimmt
    }
    
    theFunktion(theArray[],a,b);  //hier möchte ich der Funktion die 20 Adressen übergeben???aber wie???
    
    return 0;
    }
    
    int theFunktion(theArray[],int x,int y);  //die Funktion soll die 20 Adressen und weitere Parameter aufnehmen
    
    int theFunktion(theArray[],x,y)
    {
    int result;
    reslt=theArray[1]->Element+theArray[2]->Element;  //mit Elementen der Objekte soll "gerechnet" werden
    return result;
    }
    
    //Fehlermeldung: theArray ist ein nicht definierter Name! Habe in in main() definiert und scheine ihn
    //nun nicht übergeben zu könen. Sont bei deklaration etc. läuft das PGM ohne Fehlermeldung durch.
    //Borland c++ builder 5
    

    Danke für Eure Hilfe!



  • Statt theArray ist ja auch nur der Variablenname.
    Du musst schon die Klasse mit angeben!



  • müsste es heissen... ?

    void main ()
    {
    ...
    theFunktion(theKlasse * theArray[], x, y);
    return 0;
    }
    
    theFunktion(theKlasse * theArray[],x,y);
    
    theFunktion(theKlasse * theArray[],x,y)
    {
    a=theArray[1]->Element;
    return a;
    }
    

    😞 geht auch nicht. bin ich blöd? wohl schon etwas...
    😕 ist es weil die Funktion die Länge des Arrays nicht kennt?



  • Der Funktionsaufruf müsste

    theFunktion(theArray, x, y);
    

    heissen.

    Wenns das nicht ist poste bitte den Fehler.



  • btw:
    Es heisst

    int main()
    

    😉

    Ausserdem fehlt theFunktion ein Rückgabetyp.

    Und

    freundlich schrieb:

    geht auch nicht

    ist keine aussagekräftige Fehlerbeschreibung. Was sagt denn dein Compiler?



  • Vielen Dank für den Tipp mit int main()! Deshalb haben meine PGMs nie funktioniert! 😃
    Wie du in meinem post von 11:25 siehst, hab ich das aber nicht vergessen! 👍
    Aber wie the_alien am 11:55 schrieb, liegt es eventulle an den [], die ich beim Funktionsaufruf gemacht habe. Kann dies leider erst heute Abend testen, da nun gerade kein Compiler mehr zur Verfügung.
    Kann mir zwar kaum vorstellen, dass das an den [] lag, hätte da eher eine andere Fehlermeldung erwartet, werds aber testen.

    Vielen Dank schon mal an Euch, wenn ihr hoffentlich nichts mehr dazu hört von mir, dann hats geklappt. Was meinst Du groovemaster, kann das wirklich an den [] liegen?



  • Liegt weniger am [] als an theKlasse*...



  • Halle the_alien
    theKlasse* habe ich erst nach deiner Rückmeldung von 11 Uhr 24 in einer Verzweiflungstat hinzugefügt.
    Siehe meinen Code von 11 Uhr 21, da hiess es Ursprünglich nur

    theFunktion(theArray[],a,b);  //Aufruf
    
    int theFunktion(theArray[],int x,int y);  //deklaration 
    
    int theFunktion(theArray[],x,y)           //definition
    {
    int result;
    reslt=theArray[1]->Element+theArray[2]->Element;  //mit Elementen der Objekte soll "gerechnet" werden
    return result;
    }
    

    :p



  • Ok, dann jetzt mit Code:

    theFunktion(theKlasse * theArray[],x,y); //das muss vor die main
    
    int main () // es heißt int main
    {
    ...
    theFunktion(theArray, x, y); //ohne theKlasse * und []
    return 0;
    }
    
    theFunktion(theKlasse * theArray[],x,y) //hier gehört wieder theKlasse * und [] hin
    {
    a=theArray[1]->Element;
    return a;
    }
    


  • Eher so

    int theFunktion(theKlasse * theArray[], int x, int y);
    
    int main()
    {
    ...
        theFunktion(theArray, x, y);
        return 0;
    }
    
    int theFunktion(theKlasse * theArray[], int x, int y)
    {
        int a = theArray[1]->Element;
        return a;
    }
    


  • Herzlichen Dank!
    Ich glaube, ich habe sogar Begriffen wieso es nun funktioniert.
    Der aufzurufenden Funktion muss man sagen: Du bekommst einen Array von Zeigern und diese enthalten Objekte von dieser Klasse.
    Bei der aufrufenden Funktion reicht es, den Namen des Array anzugeben, da diese Funktion ja weiss, dass es sich um ein Array von Zeigern auf Objekte von dieser Klasse handelt.

    Ist ja auch dasselbe mit den int's, wie groovemaster es uns zeigte. 😉

    Aber einen ganz besonderen Dank möchte ich nochmals für den Tipp: "int main()" aussprechen! 😃



  • freundlich schrieb:

    Aber einen ganz besonderen Dank möchte ich nochmals für den Tipp: "int main()" aussprechen! 😃

    Irgendwie hab ich das Gefühl, du fasst das als Scherz auf. Das ist es aber absolut nicht. Vom Standard werden 2 main Funktionen garantiert:

    int main();
    int main(int argc, char* argv[])
    

    Alles andere ist implementationsspezifisch. Zudem wird int als Rückgabetyp vorgeschrieben.



  • groovemaster schrieb:

    Irgendwie hab ich das Gefühl, du fasst das als Scherz auf. Das ist es aber absolut nicht. Vom Standard werden 2 main Funktionen garantiert:

    int main();
    int main(int argc, char* argv[])
    

    Alles andere ist implementationsspezifisch. Zudem wird int als Rückgabetyp vorgeschrieben.

    Hab deinen Hinweis wirklich als Scherz aufgefasst. Meinte du würdest dich über meinen Tippfehler lustig machen. Natürlich hast Du recht, mit dem Standard. Hab mich aber einfach vertippt beim Abschreiben. Hab kein copy paste gemacht, da ich nur Problem zusammengefasst und nicht das ganze Programm posten wollte.

    Also nimm mir das Missverständniss nicht übel, danke nochmals für Deine Hilfe.


Anmelden zum Antworten