Skocz do zawartości

2 małe problemy od początkującego ;)


Markar

Rekomendowane odpowiedzi

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

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

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

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

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

#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

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

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

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

@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

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

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

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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...