Pointer und Arrays



  • Hallo,

    ich habe in einer Klasse ein Feld im Header mit

    public:
    	double *dDrehzahl_ALT;
    

    deklariert und im Konstruktor

    dDrehzahl_ALT=new double [lRechnenPunkt+1];
    

    dann den Speicherplatz reserviert. In einer Funktion dieser Klasse werden nun Daten in einer Schleife ins Array geschrieben:

    for(int i=0;i<=lFeldlange;i++)
    			{
    				dDrehzahl_ALT[i]=alt.Drehzahllesen(i);
                                    ...
                                    ...
                            }
    

    Nun meine Problem: in einer anderen Klasse muss ich über einen Pointer auf die Daten des Arrays zugreifen. Im Moment habe ich den Ansatz:

    DOUBLE* CInterfaceExcel::GetDrehzahl_ALT(void)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	// TODO: Fügen Sie hier Ihren Dispatchhandlercode ein.
    
    	//m_dDrehzahl_ALT=+um.dDrehzahl_ALT;
    	return um.dDrehzahl_ALT;
    
    }
    

    Ich kriege es irgendwie nicht auf die Kette, das komplette Feld zurückzugeben. Es wird nur der erste Wert des Feldes zurückgegeben.
    Ist wahrscheinlich banal, aber ich habe da eine Denkblockade zur Zeit 😞 .
    Kann mir jemand helfen?



  • Du brauchst auch nur die Adresse des Anfangs (und die Länge), um per Index auf alle Feldelemente zugreifen zu können:

    double* values = idata.GetDrehzahl_ALT();
    int len = idata.GetFeldLaenge_ALT();//diese Methode gibt lRechenpunkt+1 zurück
    for(int i=0;i<len;++i)
      cout<<values[i]<<' ';
    

    (gab's nicht gestern ein ähnliches Problem mit char's?)



  • Danke für die schnelle Antwort 🙂 .
    Eine Frage zu dieser: als was ist

    idata
    

    deklariert?



  • dreimal darfst du raten 😉

    Lösung:

    CInterfaceExcel idata
    

    (oder eine abgeleitete Klasse - das ist das Objekt, von dem du dein Array anfordern willst)

    PS: Ich schiebe dich mal eben ins C++-Board, da dürftest du besser aufgehoben sein mit der Frage.



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke schön.
    Gebe ich aber so nicht einfache double Werte zurück? Eigentlich wollte ich den double* Pointer mit den Werten zurück geben. Geht das überhaupt?



  • Ja, du gibst einen Pointer auf das double-Array zurück - wo genau ist jetzt dein Problem?

    class test
    {
    public:
      test(size_t s=10) : data(new double[s]), size(s) {}
      ~test() {delete[]data;}
    
      //liefert einen Zeiger auf das erste Element deines Datenblocks
      double* getData() {return data;}
      size_t getSize() {return size;}
    private:
      double* data;
      size_t size;
    };
    
    ...
    test t;
    double* vals = t.getData();
    size_t num = t.getSize();
    for(int i=0;i<num;++i)
      vals[i]=(double)rand()/RAND_MAX;
    

    (solange t nicht zerstört wird, kannst du problemlos mit diesem Array arbeiten)



  • Danke für die Hilfe!
    Habe es an's Laufen bekommen.
    Schönes Wochenende.


Log in to reply