Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wywołanie fukcji main metodą klasy

Ostatnio zmodyfikowano 2016-12-21 18:09
Autor Wiadomość
Warmix
Temat założony przez niniejszego użytkownika
Wywołanie fukcji main metodą klasy
» 2016-12-21 17:02:17
Jak zrobić takie coś:

main.cpp
C/C++
void main()
{
    KL a;
   
    a.WYWOLAJ_MAIN();
}

klasa KL.cpp
C/C++
void KL::WYWOLAJ_MAIN()
{
    main(); //wywolanie funkcji main z cpp
}

Oczywiście cały problem przedstawiony w uproszczeniu.
W jaki sposób mogę wywołać funkcję main z pliku cpp w metodzie klasy KL?
P-155243
pekfos
» 2016-12-21 17:14:50
Nie można wywoływać funkcji main(). Zresztą, co by ci to dało?
P-155245
Warmix
Temat założony przez niniejszego użytkownika
» 2016-12-21 17:19:34
Piszę aplikacje w SFMLu i przydaje mi się właśnie wywołanie main() czyli ponownie uruchomienie aplikacji. Do tej pory miałem to w main.cpp i działało. Teraz przeniosłem całą obsługę do klasy i nie wiem jak tam właśnie wywołać funkcję main, bo jedyne rozwiązanie, jakie przychodzi mi do głowy to, by ta funkcja WYWOŁAJ_MAIN zwracała zero i w main.cpp dać waurnek, ze jeśli zwraca 1, to ma wywołać main(), ale czy mogę to zrobić lepiej?
P-155247
mokrowski
» 2016-12-21 17:22:51
Można, ale po co? :-/ Tym bardziej że szanujący się kompilator po uruchomieniu ostrzeżeń powie że to ... głupie :-)
C/C++
#include <iostream>

using namespace std;

static int count = 2;

int main() {
    int( * func_ptr )() = & main;
    cout << "Jestem w main()!" << endl;
    while(::count-- > 1 ) {
        func_ptr();
    }
    return 0;
}
P-155249
pekfos
» 2016-12-21 17:24:28
Wywoływanie main() jest błędne, tak mówi standard C++. Do tego, to nie jest równoznaczne ponownemu uruchomieniu aplikacji.
P-155250
Warmix
Temat założony przez niniejszego użytkownika
» 2016-12-21 17:44:46
Ok, to może innym sposobem będzie przeskoczenie do etykiety, bo generalnie program mój wygląda tak, że po kliknięciu na dany przycisk musi wykonać się cała funkcja main od  początku, taki efekt właśnie chcę uzyskać, ale w takim razie w jaki sposób mogę skorzystać z goto do przeskoczenia do etykiety, ale w sytuacji, gdy etykieta jest w main a goto jest w klasie? tzn.

main.cpp
C/C++
void main()
{
    etykieta:
    ........
}

KL.cpp
C/C++
void KL::jakas_funkcja()
{
    goto etykieta;
}

W formia jaka jest obecna wyrzuca mi:
label 'etykieta' was refenenced but not defined
P-155252
carlosmay
» 2016-12-21 17:46:40
Nie można przeskakiwać
goto
 między funkcjami.
Najlepiej zapomnij o
goto
.

Zawsze możesz umieścić zawartość funkcji
main()
 w innej funkcji i wywoływać ją sobie do woli.
P-155253
Warmix
Temat założony przez niniejszego użytkownika
» 2016-12-21 17:56:21
carlosmay, wiem, że nie powinno się stosować goto, ale mój przypadek powrotu do goto zdarzać się będzie bardzo bardzo rzadko, dlatego stosowanie pętli, czyli tworzenie osobnej funkcji zawierającej treść maina wydaje mi się bezsensowe, dlatego dla tak rzadkiego przypadku, nie wiem czy nie lepiej zrobić to rzeczej wywołując maina czy korzystając z goto po prostu.
P-155254
« 1 » 2
  Strona 1 z 2 Następna strona