return void



  • Kann mir jemand sagen warum bei dieser Methode hier "return void" einen Compilierfehler herbeiruft? Is jetzt nur die Methode, da der gesamte Code zu groß wäre:

    void Mobile_Node::show_all(long number)
    {
        cout << temp->get_a() << "\n";
        number--;
        if (number==0)
        {
            return void; //<--
        }
        Mobile_Node *temp=dynamic_cast<Mobile_Node *> (next);
        temp->show_all(number);
    }
    

    ERROR's

    Compiling: C:\MinGW\Andi\liste.cpp
    C:\MinGW\Andi\liste.cpp: In member function void Mobile\_Node::show\_all(long int)': C:\\MinGW\\Andi\\liste.cpp:48: error: expected primary-expression before "void" C:\\MinGW\\Andi\\liste.cpp:48: error: return-statement with a value, in function returning 'void' C:\\MinGW\\Andi\\liste.cpp:48: error: expected;' before "void"
    C:\MinGW\Andi\liste.cpp:48: error: declaration does not declare anything
    Process terminated with status 1 (0 minutes, 0 seconds)
    4 errors, 0 warnings

    Mh, ich glaub es is einfach zuspät.... 😃

    MfG
    Stromberg



  • Weil es "return;" ist und nicht "return void;"



  • Oh, echt...ich hab irgendwie immer gedacht des heißt "return void;" na ja wieder was dazugelernt, aber ich verwende des "return;" eigentlich ja au so selten... 😃
    Dankeschön + Gute Nacht.



  • Das einzige was diesbezüglich erlaubt ist und so ähnlich aussieht sind die sog. "void returns":

    void a() {}
    void b() { return a(); }
    

    Das vereinfacht einem das Leben beim Programmieren von Templates manchmal enorm, denke dafür wurde es auch gemacht.



  • Was auch cool ist, ist

    void MyFunc()
    {
        return static_cast<void>(5);
    }
    

    Felix



  • @hustbaer

    hustbaer schrieb:

    Das vereinfacht einem das Leben beim Programmieren von Templates manchmal enorm, denke dafür wurde es auch gemacht.

    also, ich glaub ich verstehe schon was dein Code macht, er benutzt das "void" von funktion "a" oder? Also des was "a" zurückgibt. Aber da is doch jetzt kein Unterschied zu:

    void a() {}
    void b() { return; }
    

    oder?

    @Phoemux
    Geht das mit allen Datentypen, z.B. auch mit "string"....also:

    void MyFunc()
    {
        return static_cast<string>("Hallo");
    }
    

    Aber sowas benötigt man doch eher selten bis nie oder?

    MfG
    Stromberg



  • Stromberg schrieb:

    @Phoemux
    Geht das mit allen Datentypen, z.B. auch mit "string"....also:

    void MyFunc()
    {
        return static_cast<string>("Hallo");
    }
    

    Aber sowas benötigt man doch eher selten bis nie oder?

    Ja, geht so weit ich weiß mit allen Datentypen. Das ist für Templates manchmal ganz nützlich. Z.B. bei tr1::function<ReturnTyp(Args)> kann man ja Callable-Objects benutzen, für die static_cast<Type>(OriginalType) gültig ist, d.h. folgendes würde gehen:

    int myFunc(int);
    tr1::function<void(double)> = &myFunc;
    

    Für templates ist das ganz nützlich, weil man nicht extra eine partielle Spezialisierung machen muss.

    Felix



  • Stromberg schrieb:

    @hustbaer
    also, ich glaub ich verstehe schon was dein Code macht, er benutzt das "void" von funktion "a" oder? Also des was "a" zurückgibt. Aber da is doch jetzt kein Unterschied zu:

    void a() {}
    void b() { return; }
    

    oder?

    Nicht ganz richtig: 🙂 Fkt. a() wird nicht aufgerufen:

    void a() {}
    void b() {
       a();
       return;
    }
    

    Bisschen pingelig, aber so ist richtig 😉

    Lg



  • Ich würde sagen das ist, sobald a mal nichtmehr leer sind und ein paar Nebeneffekte hat, ein REISEN Unterschied 😉


Anmelden zum Antworten