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 void main() { KL a; a.WYWOLAJ_MAIN(); } klasa KL.cpp void KL::WYWOLAJ_MAIN() { main(); } Oczywiście cały problem przedstawiony w uproszczeniu. W jaki sposób mogę wywołać funkcję main z pliku cpp w metodzie klasy KL? |
|
pekfos |
» 2016-12-21 17:14:50 Nie można wywoływać funkcji main(). Zresztą, co by ci to dało? |
|
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? |
|
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 :-) #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; }
|
|
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. |
|
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 void main() { etykieta: ........ } KL.cpp void KL::jakas_funkcja() { goto etykieta; } W formia jaka jest obecna wyrzuca mi: label 'etykieta' was refenenced but not defined |
|
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. |
|
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. |
|
« 1 » 2 |