Markar Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Witam, uczę się C++ od jakiegoś... Pół miesiąca... Nieważne, uzywam kompilatora Dev-C++, i mam dwa problemy: 1.Jak zdeklarować zmienną tylko raz jeśli na końcu kodu mam return(main());? 2.Jesli mam Main.cpp i Main2.cpp, co zrobić w Main.cpp żeby wykonał się kod który jest w Main2.cpp? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 1. Nie rozumiem. Zmienne deklaruje się raz i one są widoczne tylko w danej przestrzeni (przestrzeni nazw, pętli, funkcji, etc) jesli nie byly deklarowane jako globalne (static chociazby). return(main());O bron boze taki wynalazek stosowac :0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 @YXE(Psihix, psyś) Więc co mam zrobić żeby nie stosować return(main()); tylko powtarzać jakiś kawałek kodu? I jaka jest odpowiedź na drugie pytanie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Slash (Pental) Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 2. Na logikę: #include "main2.cpp" Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ch3matic Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 @YXE(Psihix, psyś) Więc co mam zrobić żeby nie stosować return(main()); tylko powtarzać jakiś kawałek kodu? I jaka jest odpowiedź na drugie pytanie. zrób sobie ten kawalek kodu jako funkcje i wywoluj kiedy chcesz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 @Up, jako funkcje... Wiem o co chodzi tylko jak to zrobić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ch3matic Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 przed main napisz np int wybor; void MegaFunkcja(){ //kod cout << "powtarzac?\n1-tak\n2-nie"; if(wybor == 1) MegaFunkcja(); } int main(){ MegaFunkcja() } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 Nienawidze C++, lubie prograamować ale nie lubię kiedy wywala tysiące errorów i coś nie działa, no cóż Dev-C++ jest można by powiedzieć średniowiecznym programem, a ja kiepskim programistą :/ To nie dla mnie :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Slash (Pental) Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 To nie wina narzędzia, uwierz mi. Że C++ pluje błędami - wiadome nie od dziś. Polecam zakup pierwszej lepszej książki. Warto. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 Dobra juz sie pozbierałem xD Mógł by mi ktoś w Dev-C++ zrobić przykład tego co napisałem w 2 punkcie w pierwszym poscie? Najlepiej mi się uczy z przykładów ;D EDIT: Pytanko jeszcze jak zakończyć działanie programu skryptem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZeroXbot Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Program wyłączasz używając return dla funkcji main. Tu masz za to lekcję o dzieleniu projektu na kilka plików źródłowych link Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
:thumbsup: Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 2. Na logikę: #include "main2.cpp" Na logikę to żeś zje**ł. main.cpp #include "main2.h" int main() { napisz_co(); return 0; } main2.h // tu umieszczasz prototypy funkcji, deklaracje klas, struktur itp. void napisz_co(); main2.cpp // a tu definicje #include <iostream> #include "main2.h" void napisz_co() { std::cout << "co" << std::endl } kod się kompiluje w nastepujacy sposób (jeśli nie masz IDE) g++ main.cpp main2.cpp -o program.exe Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Egzekutor Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 1. Po jasnego gwinta robić funkcję. Napisz jedną wielką pętlę while dla całego programu i nie będziesz musiał zwracać main. Instrukcją goto wyskoczysz z funkcji main i wyjdziesz z programu :) - ale nie jestem pewien ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 Mam problem, gdy robie sobie funkcje, czyli np. BRAMA(); MENU(); to jeżeli dam void MENU() nad void BRAMA(), a w MENU mam BRAMA(); to pisze errora 19 E:\Dev-Cpp\Moje projekty\RPG2\Gra.cpp `BRAMA_MIASTA_VARROCK' undeclared (first use this function), wiem o co chodzi w tym błędzie ale nie wiem co mam zrobić... BRAMA(); Jest deklarowane później niż MENU(); i mam w nim też funkcję MENU(); ale nie dam rady szybciej deklarować BRAMA(); od MENU(); i jednocześnie na odwrót :/ CO JA MAM ZROBIĆ???? EDIT: @UP: nie używam tego już, jak się dowiedziałem o void to nie chciałem już za bardzo o tym się dowiadywać, ale na pewno się to kiedyś przyda ;). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 #include "main2.cpp" Jeśli nie jest się czegoś pewnym na 100% lepiej nie odpisywać. Mieszasz chłopakowi w głowie a sam jesteś blisko jego poziomu. @Markar Odpuść sobie język c++. Na razie zajmij się gamemakerem. Jesteś w takim wieku, że spokojnie możesz poświęcić jeszcze rok lub 2 i nauczyć się logicznego myślenia, organizowania swojej pracy, wyszukiwania informacji, podstaw programowania itp. Jeśli już bardzo Ci zależy na c++ kup sobie symfonie. Na pewno nie jest to super książka na temat tego języka ale bardzo prosto wszystko tłumaczy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 Emm... To że mam 11 lat nie oznacza że mam jakiś problem z logicznym mysleniem i nie umiem szukać informacji, poradzę sobie ;) Tylko niech ktoś odpowie na pytanie dwa posty wyżej. PS Game maker mi się juz znudził ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Emm... To że mam 11 lat nie oznacza że mam jakiś problem z logicznym mysleniem i nie umiem szukać informacji, poradzę sobie Tylko niech ktoś odpowie na pytanie dwa posty wyżej. W takim razie niech nikt nie odpowiada na te pytania. W sieci znajduję się tyle materiałów na temat tego języka, że rozwiązanie takiego błahego problemu nie powinno Ci zająć więcej jak 5min. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubis Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Mam nadzieję, że wiesz, że jak deklarujesz funkcje musi ona posiadać jakieś instrukcje. Jak zadeklarujesz w ten sposób void FUNKCJA(); to nic z tego nie wyjdzie. Deklarowanie funkcji musi wyglądać tak: void FUNKCJA() { INSTRUKCJE } Cóż, widzę, że wziąłeś się za programowanie gier... Jak już poznasz podstawy ważną rzeczą, za którą się weź jest OOP, czyli programowanie obiektowe... Jeśli chcesz robić gry, polecam nauczyć się SDL'a do 2D, potem OpenGL do 3D. Dobry tutorial do SDL'a napisał Lazy Foo (wpisz w google Lazy Foo SDL). Co do dalszej nauki... Nie zniechęcaj się do c++ :) Wiesz co by było dobre, żebyś przeczytał tutorial Xion'a "Od zera do gier kodera" gdzieś kończąc na wskaźnikach, potem zakupił, bądź ściągnął (tej wersji nie polecam) książkę "Thinking in C++", ja osobiście ją czytam i jest tam doskonale wszystko wytłumaczone, tylko trzeba znać podstawy. Polecam tą książkę ze względu na doskonale wyjaśnioną obiektowość i filozoficzne podejście autora :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Deklarowanie funkcji musi wyglądać tak: Niby coś tam przeczytałeś a głupoty piszesz ;( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 @Anubis, nie mam zamiaru się zniechęcać ;) Wiem że trzeba podać instrukcję funkcji, ale kiedy mam wywołać w funkcji MENU(); funkcję BRAMA(); a jednocześnie muszę zrobić na odwrót, czyli w funkcji BRAMA(); użyć funkcji MENU(); to musze deklarować BRAMA(); nad MENU(); i jednoczesnie MENU(); nad BRAMA(); co jest teoretycznie niemożliwe ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 void func1(); void func2(); int main() { func2(); } void func1() { // } void func2() { func1(); } Jak chcesz to się męcz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubis Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Tzn ja nigdy nie próbowałem takich rozwiązań, ale może znajdę sposób, bo wiem, że jeśli chcesz użyć zmiennych wewnątrz funkcji od razu jak je deklarujesz to wystarczy napisać: void FUNKCJA(int a, int B) { return a + b; } lub void FUNKCJA(int a, int b, int wynik) { wynik = a + b; } Może z funkcjami jest podobna sytuacja. Zaciekawiło mnie to, że aż za chwilę to sprawdzę, trochę pokombinuję. No i zastanów się jeszcze czy instrukcji z funkcji MENU(); nie można po prostu dopisać do funkcji BRAMA();, bez potrzeby zagnieżdżania funkcji? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Może z funkcjami jest podobna sytuacja. Zaciekawiło mnie to, że aż za chwilę to sprawdzę, trochę pokombinuję.a Tzn ja nigdy nie próbowałem takich rozwiązań, ale może znajdę sposób, bo wiem, że jeśli chcesz użyć zmiennych wewnątrz funkcji od razu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubis Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Will, o co Ci chodzi? A co do problemu Markara... Napisałem takie badziewie, sam fakt, ze to się kompiluje jest sukcesem, ale zagnieżdżanie funkcji jest głupie :) #include <iostream> using namespace std; void BRAMA(bool otworz, int a) { otworz = true; cout << a; } int MENU(int opcja1, int opcja2) { opcja1 = opcja1 + opcja2; cout << opcja1; } int main() { bool otworz; BRAMA(otworz, MENU(1, 2)); return 0; } Zdecydowanie lepszym rozwiązaniem jest to: #include <iostream> using namespace std; void BRAMA(bool otworz, int opcja1, int opcja2) { otworz = true; opcja1 = opcja1 + opcja2; cout << opcja1; } int main() { bool otworz; BRAMA(otworz, 1, 2); return 0; } Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Will, o co Ci chodzi? Jeśli nie rozumiesz to nie ważne. bool otworz; BRAMA(otworz, MENU(1, 2)); bool otworz; int res=MENU(1,2); BRAMA(otworz, res); Nie wiem właściwie po co dałeś taki kod 0.o. @edit Twój kod nawet nie będzie działał ;( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 Nie o to chodzi... Najlepiej spytam psihixa na PW ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
:thumbsup: Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 jeśli chcesz, aby funkcja np. FUNKCJA2 wykorzystywała zmienną lokalną zadeklarowaną w FUNKCJA1, która wywołuję FUNKCJA2 to musisz poprzedzić zmienną słowem extern. np. #include <iostream> #include <string> using namespace std; void pisz(); int main() { tekst = "witaj, swiecie"; pisz(); return 0; } void pisz() { extern tekst; cout << tekst << endl; } na pewno lepszym wyjściem będzie wykorzystanie wskaźników/referencji. 2. jeżeli chcesz przekazać funkcję jako argument to poczytaj o czymś takim jak callback (funkcja zwrotna). to tyle, eksperci z gmclanu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 to tyle, eksperci z gmclanu. Przecież ku... to nie będzie działać. Człowieku taki problem wrzucić kod nawet do dev'a i wcisnąć F9?(To nawet nie jest poprawne składniowo). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 7 Lutego 2010 Autor Udostępnij Opublikowano 7 Lutego 2010 Po prostu jak wykonać funkcję która jest deklarowana poniżej kodu w którym się ją wywołuje? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 7 Lutego 2010 Udostępnij Opublikowano 7 Lutego 2010 Przecież Ci wyżej napisałem. void func(); //deklaracja int main() { func();//używasz swojej funkcji } void func()//definicja { //robisz w niej co chcesz } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się