Yahoo Clever wird am 4. Mai 2021 (Eastern Time, Zeitzone US-Ostküste) eingestellt. Ab dem 20. April 2021 (Eastern Time) ist die Website von Yahoo Clever nur noch im reinen Lesemodus verfügbar. Andere Yahoo Produkte oder Dienste oder Ihr Yahoo Account sind von diesen Änderungen nicht betroffen. Auf dieser Hilfeseite finden Sie weitere Informationen zur Einstellung von Yahoo Clever und dazu, wie Sie Ihre Daten herunterladen.

Ist es möglich in C++ eine Funktion in eine Funktion zu coden (Verschachtelung, wie bei if)?

Habe es so versucht:

#include <iostream>

#include <Windows.h>

using namespace std;

int Func2();

int main() {

cout << "Erste func" << endl;

Sleep(3000);

Func2();

int Func2() {

cout << "Zweite Func" << endl;

}

}

Nur eben, dass der Code oben nicht funktioniert. Bekomme beim compilieren folgende Fehlermeldung:

'Func2': Lokale Funktionsdefinitionen sind unzulässig

Gibt es irgendeine Möglichkeit Funcs zu verschachteln?

(Ja ich bin noch ein Anfänger und Ja ich habe mir schon ein Buch gekauft (C++ für Einsteiger von Willemer) <--- Klammerverschachtelung ;)

4 Antworten

Bewertung
  • vor 1 Jahrzehnt
    Beste Antwort

    Nein, so was geht nicht, wozu sollte es auch? Wenn du das "Funktion" aus deinem Gedanken weglässt, kannst du aber sehr wohl die Rümpfe verschachteln:

    #include <iostream>

    int main() {

    int bla = 12;

    // "Func2(); int Func2()" weggelassen, ist ja so eh sinnlos.

    {

    int temp = 20;

    std::cout << bla << std::endl; // => 12

    std::cout << temp << std::endl; // => 20

    }

    std::cout << temp; // => Fehler, weil temp nur im inneren Rumpf deklariert ist

    }

    Das hat nicht viele Auswirkungen, außer dass lokale Variablen, die im inneren Rumpf deklariert werden auch nur in diesem gelten. Das ist nicht wirklich nützlich und es wird auch kaum gebraucht.

  • Anonym
    vor 1 Jahrzehnt

    Wenn du uns mitteilst, wofür du das brauchst, finden wir sicherlich eine bessere Lösung für dein Problem.

  • Anonym
    vor 1 Jahrzehnt

    Wenn du die Funktion als int implementierst, sollte (/muss?) sie auch einen entsprechenden Wert zurückgeben, also musst du return [0/1/x] einbauen. Soll sie nichts zurückgeben, implementiere sie als void.

    Du solltest (/kannst?) die Funktion nicht aufrufen, bevor du sie implementiert hast.

    In deinem Beispiel hast du Func2() zweimal implementiert, einmal global und einmal in der main(). Wieso? Willst du sie nur oben leer implementieren und dann in der main() mit Inhalt füllen, musst du das int weglassen: Func2() { <Inhalt> }

    Die Verschachtelung an sich sollte keine Probleme machen

    * für "implementieren" musst du in meiner Antwort jeweils das passende Wort einsetzen, ich komme gerade nicht drauf

  • vor 1 Jahrzehnt

    Ja, das ist kein Problem.

    Vergiss bei deinem Code bei der Func2 die geschweiften Klammern und den Inhalt nicht;

    Aus der main-Funktion kannst du nur darauf zugreifen, aber diese selbst nicht mehr definieren.

    Hier ein Beispiel mit doppelter Verschachtelung:

    -----------------------------------------

    #include <iostream>

    #include <Windows.h>

    using namespace std;

    int Func2() {

    cout << "Zweite Func\n";

    }

    int Func1() {

    cout << "Erste Func\n";

    Func2();

    }

    int main() {

    Func1();

    Sleep(3000);

    Func2();

    }

    -----------------------------------------

Haben Sie noch Fragen? Jetzt beantworten lassen.