Skocz do zawartości

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


Rekomendowane odpowiedzi

Opublikowano

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?

Opublikowano

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
Opublikowano

@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.

Opublikowano
@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

Opublikowano

przed main napisz np

int wybor;

void MegaFunkcja(){

 

//kod

cout << "powtarzac?\n1-tak\n2-nie";

if(wybor == 1) MegaFunkcja();

 

}

 

 

int main(){

MegaFunkcja()

}

Opublikowano

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 :/

Opublikowano

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?

Opublikowano
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

Opublikowano

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

Opublikowano

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 ;).

Opublikowano
#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.

Opublikowano

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

Opublikowano
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.

Opublikowano

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 :)

Opublikowano

@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 ;)

Opublikowano

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?

Opublikowano
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
Opublikowano

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

Opublikowano
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ł ;(

Opublikowano

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.

Opublikowano
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).

Opublikowano

Przecież Ci wyżej napisałem.

 

void func(); //deklaracja

 

 

int main()

{

func();//używasz swojej funkcji

}

 

void func()//definicja

{

//robisz w niej co chcesz

}

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ę...