• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odwołanie do funkcji z pliku .cpp w pliku .h

Object Storage Arubacloud
0 głosów
1,195 wizyt
pytanie zadane 20 kwietnia 2018 w C i C++ przez Treck7 Nowicjusz (120 p.)
Witam. Mam kod programu rozdzielony na 4 pliki (1 main.cpp i 3 pliki .h, w których znajdują się funkcje). Chciałbym zapytać czy da się jakoś odwołać w funkcji z pliku .h do funkcji, która jest w pliku głównym np. do funkcji main();

Gdy próbuję tego tak po prostu dostaję error " 'main' was not declared in this scope".

Chciałbym po prostu, żeby funkcja z pliku .h mogła wywołać np. main(); żeby program zaczął wykonywać się od nowa.
5
komentarz 20 kwietnia 2018 przez j23 Mędrzec (194,920 p.)

wywołać np. main()

Trecku Siedem, nie idź tą drogą...

 

 

komentarz 31 lipca 2019 przez niezalogowany
edycja 31 lipca 2019

no właśnie chciałem pójść podobną drogą. Wszystkie funkcje dotyczącego jednego zagadnienia zgrupować w 2 plikach .h i .cpp taka "ala klasa" ale bez typu danych bo i tak zwracany typ to przeważnie zmiennoprzecinkowy. Dlaczego nie iść tą drogą

np coś takiego

#ifndef ROZSTAW_H
#define ROZSTAW_H

enum {  a1_ro_lower_then_420=1,
        a2_ro_lower_then_420,
        a3t_ro_lower_then_420,
        a3c_ro_lower_then_420,
        a4t_ro_lower_then_420,
        a4c_ro_lower_then_420,
        
        a1_ro_between_420_500=101,
        a2_ro_between_420_500,
        a3t_ro_between_420_500,
        a3c_ro_between_420_500,
        a4t_ro_between_420_500,
        a4c_ro_between_420_500,
        
};
double return_5_d();
double return_7_d();
double return_10_d();
double return_15_d();
double return_3_d();
double return_left_5_plus_5_multiple_abs_cos_alfa_right_multiple_d();
double return_left_5_plus_7_multiple_abs_cos_alfa_right_multiple_d();
double return_left_10_plus_5_multiple_abs_cos_alfa_right_multiple_d();
double return_left_5_plus_2_multiple_sin_alfa_right_multiple_d();
double return_left_5_plus_5_multiple_sin_alfa_right_multiple_d();
double return_left_7_plus_8_multiple_abs_cos_alfa_right_multiple_d();

double return_left_15_plus_5_multiple_abs_cos_alfa_right_multiple_d();

double return_left_7_plus_2_multiple_sin_alfa_right_multiple_d();
double return_left_7_plus_5_multiple_sin_alfa_right_multiple_d();

double return_left_4_plus_1_multiple_abs_cos_alfa_right_multiple_d();
double return_left_3_plus_1_multiple_abs_sin_alfa_right_multiple_d();

double return_left_7_plus_5_multiple_cos_alfa_right_multiple_d();

double return_left_3_plus_2_multiple_sin_alfa_right_multiple_d();
double return_left_3_plus_4_multiple_sin_alfa_right_multiple_d();


#endif // ROZSTAW_H

 

komentarz 31 lipca 2019 przez j23 Mędrzec (194,920 p.)

Dlaczego nie iść tą drogą

To dotyczyło powtórnego wywoływania funkcji main a nie deklarowania/definiowania funkcji w klikach.

komentarz 31 lipca 2019 przez niezalogowany
edycja 31 lipca 2019
A coś takiego, oczywiście po dodaniu brakujących elementów ma sens? Bo tak jest mi dużo łatwiej jedna "ala klasa" jeden "ala widget"?

P.S. A nie chciałem nowego wątku zakładać, znalazłem w miarę podobny.

edit: A i z części funkcji zrezygnowałem, bo nie ma potrzeby ich tworzyć, bo wywołanie przeważnie tylko raz. a co najwyżej 3 razy
komentarz 31 lipca 2019 przez j23 Mędrzec (194,920 p.)
Podział większego projektu na pliki jest jak najbardziej ok. Rób tak, by było czytelnie.

3 odpowiedzi

+2 głosów
odpowiedź 20 kwietnia 2018 przez Łukasz Wasilewski Mądrala (5,190 p.)

Cześć, 

wydaje mi się, że raczej nie ma takiej możliwości, by wywołać funkcję main() - zwłaszcza z klasy. Nawet, jeśli było by to możliwe to nie stosuje się tego i jest to bardzo, bardzo złe rozwiązanie. 

Natomiast podpowiem Ci, jak osiągnąć ten efekt. :) 

Ogólnie pliki .h o których piszesz to pliki nagłówkowe, to tam deklarujesz klasy, jej zmienne i funkcje. Do każdego takiego pliku powinieneś mieć plik o tej samej nazwie (klasy) .cpp, gdzie definiujesz wszystkie swoje metody. U siebie powinieneś mieć już 7 plików. :) 

Możesz zajrzeć na moje repozytorium tutaj, zobaczysz jak to mniej więcej wygląda.

Jeżeli stworzysz sobie klasę dajmy na to game to w niej robisz funkcję mainLoop() gdzie dzieję się wszystko w jakiejś nieskończonej pętli. Taką funkcję łatwo jest odpalić z main gdy stworzysz obiekt klasy game tak:

int main()
{
Game game;
game.mainLoop(); 
// w funkcji tej powinien się znajdować sposób na wyjście z pętli np gdy ukończymy poziom
// wtedy możemy np. 
game.loadNewLevel();
// po czym znów uruchamiamy
game.mainLoop();

return 0;
}

Mam nadzieję, że pomogłem. :)

0 głosów
odpowiedź 20 kwietnia 2018 przez j23 Mędrzec (194,920 p.)

Pierwszy z brzegu link.

0 głosów
odpowiedź 20 kwietnia 2018 przez Zayebisty Gaduła (3,200 p.)
raczej sie nie da, ale nawet jesli to nie powinno sie

Podobne pytania

0 głosów
0 odpowiedzi 897 wizyt
0 głosów
1 odpowiedź 2,543 wizyt
0 głosów
1 odpowiedź 760 wizyt
pytanie zadane 8 października 2016 w C i C++ przez Sidzej Użytkownik (850 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...