Benutzung Pointer und &



  • Hallo,

    ich versteh nicht was folgende Zeile macht:

    myQueueClass & queue = myQueueManager::getSingleton -> getOutputQueue(queueName);
    

    Weiter unten wird dann

    queue.putMsg(&msg, reliably);

    aufgerufen, obwohl putMsg eine Funktion von myQueueClass ist.Was genau ist queue?Was steht da drin?Der Rückgabewert bei getOpenedQueue ist
    return(queueInSet->queue());
    Ist in queueInSet der Queuename drin als Attribut von queue()?



  • queue ist eine Referenz auf ein Objekt vom Typ myQueueClass



  • Hallo,

    ich versteh nicht was folgende Zeilen bedeuten sollen:

    Weiter unten wird dann

    queue.putMsg(&msg, reliably);

    aufgerufen, obwohl putMsg eine Funktion von myQueueClass ist.Was genau ist queue?Was steht da drin?Der Rückgabewert bei getOpenedQueue ist
    return(queueInSet->queue());
    Ist in queueInSet der Queuename drin als Attribut von queue()?

    Was hat das denn mit Operator überladen zu tun? 🧐



  • @Belli sagte in & Operator überladen:

    queue ist eine Referenz auf ein Objekt vom Typ myQueueClass

    Ok danke.Und was bedeutet der Rückgabewert return(queueInSet->queue()); ?



  • queueInSet ist ein Zeiger auf iwas (kann man hier nicht erkennen), was eine Methode namens queue() zur Verfügung stellt.
    Diese Methode gibt offensichtlich iwas zurück, an der Zeile auch zu erkennen, was das ist.



  • @HarteWare sagte in & Operator überladen:

    Hallo,

    ich versteh nicht was folgende Zeilen bedeuten sollen:

    Weiter unten wird dann

    queue.putMsg(&msg, reliably);

    aufgerufen, obwohl putMsg eine Funktion von myQueueClass ist.Was genau ist queue?Was steht da drin?Der Rückgabewert bei getOpenedQueue ist
    return(queueInSet->queue());
    Ist in queueInSet der Queuename drin als Attribut von queue()?

    Was hat das denn mit Operator überladen zu tun? 🧐

    Ich hab im Internet recherchiert und das gefunden.Nun jetzt weiss ich schon,dass es kein überladen ist,aber ich kann den Titel nicht mehr ändern.



  • @Belli sagte in & Operator überladen:

    queueInSet ist ein Zeiger auf iwas (kann man hier nicht erkennen), was eine Methode namens queue() zur Verfügung stellt.
    Diese Methode gibt offensichtlich iwas zurück, an der Zeile auch zu erkennen, was das ist.

    Ok wenn es aber ein Rückgabewert ist zu myQueueClass & queue = getOutputQueue(queueName) ist, wie kann ich danach darauf zugreifen?Bzw. wenn ich den Zeiger queueInSet bei einem Funktionsaufruf benutzen will, wie mach ich das?



  • @Joe1903 sagte in & Operator überladen:

    @HarteWare sagte in & Operator überladen:

    Hallo,

    ich versteh nicht was folgende Zeilen bedeuten sollen:

    Weiter unten wird dann

    queue.putMsg(&msg, reliably);

    aufgerufen, obwohl putMsg eine Funktion von myQueueClass ist.Was genau ist queue?Was steht da drin?Der Rückgabewert bei getOpenedQueue ist
    return(queueInSet->queue());
    Ist in queueInSet der Queuename drin als Attribut von queue()?

    Was hat das denn mit Operator überladen zu tun? 🧐

    Ich hab im Internet recherchiert und das gefunden.Nun jetzt weiss ich schon,dass es kein überladen ist,aber ich kann den Titel nicht mehr ändern.

    Soweit ich weiß geht Titel ändern über das Bearbeiten des ursprünglichen Posts.

    Ok wenn es aber ein Rückgabewert ist zu myQueueClass & queue = getOutputQueue(queueName) ist, wie kann ich danach darauf zugreifen?Bzw. wenn ich den Zeiger queueInSet bei einem Funktionsaufruf benutzen will, wie mach ich das?

    Ich würde sagen poste mal etwas mehr Code oder wir sind einfach nur am Raten.

    What are the differences between a pointer variable and a reference variable in C++?



  • @HarteWare

    myQueueClass & myQueueManager::getOutputQueue(
    const char * queueName,
    const char * queueManager)
    {
        myQueueIdClass queueId(queueName,queueManager);
        queueInSet = myQueueInLimitedSizeSetClass::createQueue(this, queueId, myQueueClass::OUTPUT, false);
    
        return(queueInSet->queue());
    }
    

    myQueueInLimitedSizeSetClass erzeugt eine Memoryallokation auf dem Heap und returniert einem Zeiger drauf.

    myQueueInLimitedSizeSetClass * myQueueInLimitedSizeSetClass createQueue(
    myQueueManager * queueManager,
    const myQueueIdClass & queueId,
    myQueueClass OpenMode openMode,
    bool openIt)
    {
        myQueueInLimitedSizeSetClass * rc = new myQueueInLimitedSizeSetClass(queueManager, queueId, openMode, openIt);
    
    return rc;
    }
    


  • @Joe1903 Das ist nicht mal gültiges C++ ?

    myQueueInLimitedSizeSetClass * myQueueInLimitedSizeSetClass createQueue(
    // ...
    myQueueClass OpenMode openMode,
    

    Es macht m. E. nach keinen Sinn, Grundlagenfragen zu stellen zu lückenhaften Codeausschnitten ohne Klassendefinitionen. Also entweder verstehen, welche Aspekte der C++ Sprache Du noch nicht verstehst, oder ein minimales, kompilierbares Beispiel posten mit entsprechenden Aspekten. Du kannst ja den ganzen Quark durch Dummy Klassen ersetzen, die praktisch leer sind. Ich meinerseits zumindest verstehe die Frage leider nicht ganz, und da weiterhin nicht ersichtlich ist, was myQueueInLimitedSizeSetClass::queue() macht, kann ich die Frage auch nicht beantworten (selbst wenn ich sie verstanden hätte). Der Name dieser Klasse ist auch schon ein riesen red flag. Wo kommt der Code denn her? Ist jetzt kein C++ wie man sich das wünschen würde.



  • @HarteWare Im Grunde ist meine Frage, wie kann ich Rückgabewerte in Form von queueInSet->queue() im weiteren Verlauf eines Programmablauf benutzen,z.B. als Aufrufparameter für andere Funktionen.



  • This post is deleted!


  • 
    someType shit = queueInSet->queue();
    someOtherFunc(shit);
    

    so...?!



  • @Cardiac Ich habe bereits folgenden Funktionsaufruf

    myClass::myFunc(&msg, reliably);

    Wie kann man solch ein Konstrukt in so ein Aufruf reinpacken?



  • @Cardiac char * shit = queueInSet -> queue();

    myClass::myFunc(shit, &msg, reliably);

    Das würde gehen oder?



  • Oh Mann, ob das geht, hängt doch von der Signatur der Methode myFunc ab ...
    Du solltest glaube ich wirklich erst mal ein paar Grundlagen schaffen.



  • @Belli Nein das ist klar,dass ich die Signatur von myFunc anpassen muss.
    Ich habe noch immer etwas nicht verstanden.
    Oberes Beispiel ist ja im Grunde

    myQueueClass & queue = (queueInSet->queue());

    Wie kann ich nun diesen Rückgabewert als Parameter nutzen?Ist als Beispiel sowas möglich:

    myQueueClass & queue = getOutputQueue(reqQName);
    ...
    myClass::myFunc(
    (queueInSet->queue()),
    &msg,
    reliably);
    ...
    Signatur:

    myClass::myFunc(
    myQueueClass * (queueInSet->queue()),
    MQMsg * msg,
    bool reliably)

    Ich weiss nicht,ob das geht.Ich versuche nur zu formulieren, was meine Frage ist.



  • @Joe1903
    Nein!



  • @manni66 Danke! Gibt es in C++ eine Möglichkeit das zu machen?



  • @Joe1903
    Ja!


Log in to reply