Problem mit vector Liste



  • Zum Dereferenzieren wir der Operator * (Sternchen) verwendet. Um an das vector Objekt zu kommen, auf das gezeigt wird, kannst du also (*imagelist) schreiben.

    QImage image = (*imagelist)[i];
    


  • pospiech schrieb:

    ...
    Daher wüsste ich noch immer gerne wie der Code mit Pointer richtig lauten müsste...

    Sagen wir mal so: "Pointer worauf ?"
    Mit der Anlage eines Zeigers auf einen vector hast du noch keinen vector, auf den er zeigen könnte.
    Und egal, ob Du das selbst gebaut oder von jemandem kopiert hast: Es muss ein vector-Objekt geben, wenn Du eines nutzen möchtest. ... und in Deinem Codeabschnitt sehe ich nicht, wo ein solches vectorObjekt angelegt oder darauf verwiesen wird.

    Wenn Du eine Haustür öffnen möchtest, reicht es Dir ja auch nicht, ein Adressbuch zu haben ... es muss schon die Adresse eines Hauses drinstehen und das Haus muss es auch (genau da) geben.

    Gruß,

    Simon2.



  • Die Lösung zum ursprünglichen Problem sieht anscheint so aus:

    vector<QImage> * imagelist;
    	imagelist = GratingVariationThread->getImageList();
    	QImage * image = &(*imagelist)[i];
    

    wobei das 'getImageList()' so aussieht

    vector<QImage> m_ImageList;
    vector<QImage> * getImageList()
    {
    	return & m_ImageList;
    }
    

    Matthias



  • pospiech schrieb:

    Die Lösung zum ursprünglichen Problem sieht anscheint so aus:

    👍 😃



  • solche Antworten helfen sicher nicht. Oder ist das nur wieder SPAM von unregistrierten Nutzern?



  • Mal abgesehen davon, dass die Lösung bereits gepostet worden ist, hier nochmal zum anschauen:

    std::vector<int> v(10,2);
    	std::vector<int>* pv;
    
    	pv = &v;
    
    	for (int i = 0;i < 10;i++)
    		std::cout << (*pv)[i] << std::endl;
    
    	std::cout << std::endl << std::endl;
    
    	for (int i = 0; i <10;i++)
    		std::cout << v[i] << std::endl;
    

    Sowas sollte man schon im Griff haben, bevor man mit QT anfängt.. 🙄



  • pospiech schrieb:

    solche Antworten helfen sicher nicht. Oder ist das nur wieder SPAM von unregistrierten Nutzern?

    Dir würde es helfen, wenn du erst mal die Grundlagen ordentlich lernst und nicht nur solange rumprobierst bis es kompiliert. Wahrscheinlich willst du das zwar auch nicht hören und meinst es ist wieder nur Spam, aber es ist (leider) die Wahrheit.



  • wennmanwüstewasmanmacht schrieb:

    pospiech schrieb:

    solche Antworten helfen sicher nicht. Oder ist das nur wieder SPAM von unregistrierten Nutzern?

    Dir würde es helfen, wenn du erst mal die Grundlagen ordentlich lernst und nicht nur solange rumprobierst bis es kompiliert. Wahrscheinlich willst du das zwar auch nicht hören und meinst es ist wieder nur Spam, aber es ist (leider) die Wahrheit.

    Wenn ich ein Problem nicht verstehe, bleibt mir wohl nichts anderes übrig als auszuprobieren. Wobei ich den Unterschied bei den Dingen die ich ausprobiert habe durchaus kenne - nur das mir das keine Erklärung für meinen ursprünglichen Fehler liefert. Die hier gepostet Antwort verstehe ich nun durchaus. Und ich finde es durchaus nicht peinlich das ich diesen - eigentlich einfachen Fehler - nicht verstanden habe. Das wäre es erst wenn ich den Fehler mehrfach nicht erkennen würde.
    Das der Thread trotzdem solange geworden ist ist unnötig, denn der 5. Eintrag hätte mir gereicht. Aber das passiert halt wenn ich die Antworten nicht verstehe. Deine Antwort war insbesondere nicht hilfreich. Und bei einer Frage zu sagen das man erst die Grundlagen lernen soll ist auch nicht hilfreich, wenn auch das Beispiel von drakon sehr anschaulich das Problem nocheinmal zusammenfasst. Aber das hat alles nichts mit der Frage zu tun, sondern mit der Kultur wie in diesem Forum miteinander umgegangen wird.



  • pospiech schrieb:

    Wenn ich ein Problem nicht verstehe, bleibt mir wohl nichts anderes übrig als auszuprobieren. Wobei ich den Unterschied bei den Dingen die ich ausprobiert habe durchaus kenne - nur das mir das keine Erklärung für meinen ursprünglichen Fehler liefert. Die hier gepostet Antwort verstehe ich nun durchaus.

    pospiech schrieb:

    QImage * image = &(*imagelist)[i];
    

    Kannst du jetzt hier wirklich erklären, was die & und * an den Stellen an denen du sie verwendest bedeuten und warum du das machst?



  • wennmanwüstewasmanmacht schrieb:

    pospiech schrieb:

    QImage * image = &(*imagelist)[i];
    

    Kannst du jetzt hier wirklich erklären, was die & und * an den Stellen an denen du sie verwendest bedeuten und warum du das machst?

    Also, soweit ich das verstanden habe muss ich, um an die innerhalb des vectors verwendete Klasse diese dereferenzieren, was ein (*imagelist)[i] macht. Da ich aber den Pointer auf diese Objekt benötige mache ich halte wieder einen draus.

    Und falls ich total falsch liege und man das alles anders machen sollte willst du mir bestimme erklären was ich falsch mache und wie es richtig geht.



  • pospiech schrieb:

    Also, soweit ich das verstanden habe muss ich, um an die innerhalb des vectors verwendete Klasse diese dereferenzieren, was ein (*imagelist)[i] macht.

    Da fehlt jetzt zwar ein Teil vom Satz, aber falls du sagen willst, dass du die Klasse im Vector dereferenzieren musst, dann ist das falsch. Mit (*imagelist) dereferenzierst du den Pointer auf den vector, damit du mit dem [] operator des vectors auf ein Element des vectors zugreifen kannst.



  • wennmanwüstewasmanmacht schrieb:

    pospiech schrieb:

    Also, soweit ich das verstanden habe muss ich, um an die innerhalb des vectors verwendete Klasse diese dereferenzieren, was ein (*imagelist)[i] macht.

    Da fehlt jetzt zwar ein Teil vom Satz, aber falls du sagen willst, dass du die Klasse im Vector dereferenzieren musst, dann ist das falsch. Mit (*imagelist) dereferenzierst du den Pointer auf den vector, damit du mit dem [] operator des vectors auf ein Element des vectors zugreifen kannst.

    Deine Forumulierung sagt das aus was ich sagen wollte. Denn es ist natürlich der vector der ein Pointer ist nicht die Elemente des vectors.


Anmelden zum Antworten