Markar Opublikowano 7 Lutego 2010 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?
PsichiX Opublikowano 7 Lutego 2010 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
Markar Opublikowano 7 Lutego 2010 Autor 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.
Slash (Pental) Opublikowano 7 Lutego 2010 Opublikowano 7 Lutego 2010 2. Na logikę: #include "main2.cpp"
ch3matic Opublikowano 7 Lutego 2010 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
Markar Opublikowano 7 Lutego 2010 Autor Opublikowano 7 Lutego 2010 @Up, jako funkcje... Wiem o co chodzi tylko jak to zrobić?
ch3matic Opublikowano 7 Lutego 2010 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() }
Markar Opublikowano 7 Lutego 2010 Autor 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 :/
Slash (Pental) Opublikowano 7 Lutego 2010 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.
Markar Opublikowano 7 Lutego 2010 Autor 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?
ZeroXbot Opublikowano 7 Lutego 2010 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
:thumbsup: Opublikowano 7 Lutego 2010 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
Egzekutor Opublikowano 7 Lutego 2010 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
Markar Opublikowano 7 Lutego 2010 Autor 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 ;).
Will Opublikowano 7 Lutego 2010 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.
Markar Opublikowano 7 Lutego 2010 Autor 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
Will Opublikowano 7 Lutego 2010 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.
Anubis Opublikowano 7 Lutego 2010 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 :)
Will Opublikowano 7 Lutego 2010 Opublikowano 7 Lutego 2010 Deklarowanie funkcji musi wyglądać tak: Niby coś tam przeczytałeś a głupoty piszesz ;(
Markar Opublikowano 7 Lutego 2010 Autor 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 ;)
Will Opublikowano 7 Lutego 2010 Opublikowano 7 Lutego 2010 void func1(); void func2(); int main() { func2(); } void func1() { // } void func2() { func1(); } Jak chcesz to się męcz.
Anubis Opublikowano 7 Lutego 2010 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?
Will Opublikowano 7 Lutego 2010 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
Anubis Opublikowano 7 Lutego 2010 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
Will Opublikowano 7 Lutego 2010 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ł ;(
Markar Opublikowano 7 Lutego 2010 Autor Opublikowano 7 Lutego 2010 Nie o to chodzi... Najlepiej spytam psihixa na PW ;)
:thumbsup: Opublikowano 7 Lutego 2010 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.
Will Opublikowano 7 Lutego 2010 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).
Markar Opublikowano 7 Lutego 2010 Autor Opublikowano 7 Lutego 2010 Po prostu jak wykonać funkcję która jest deklarowana poniżej kodu w którym się ją wywołuje?
Will Opublikowano 7 Lutego 2010 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 }
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ę