[C++] Błąd kompilacji prosta rekurencja


(Marcin86s) #1
#include 

#include 

using namespace std;


const n=10;

int tab[n]={1,2,3,5,2,55,-3,8,13,-1};

void szukaj(int tab[n],int left,int right,int x)

{

if (left>right)

    cout << "Element " << x << " nie został odnaleziony\n";

else

    if (tab[left]==x)

        cout << "Znalazłem szukany element " << x << endl;

    else

        szukaj(tab,left+1,right,x);

}

Czym spowodowane są te błędy:

:5: error: ISO C++ forbids declaration of `n' with no type

: In function `void szukaj(int*, int, int, int)':

:10: error: `cout' was not declared in this scope

:13: error: `cout' was not declared in this scope

:13: error: `endl' was not declared in this scope


(Sawyer47) #2

Używasz cout i endl z biblioteki iostream. Jeśli to C++ i chcesz używać iostream to załączaj nagłówek , i są zbędne.


(Marcin86s) #3

Wywaliłem i , dałem . Pierwszy błąd nadal się pojawia.


(Drobok) #4

Daj const int do n


(Marcin86s) #5
[Linker Error] undefined reference to `WinMain@16'

ld returned 1 exit status

(Drobok) #6

Czym ty kompilujesz, że ci taki error wywala, i pozwala na argument tablicę w takiej postaci ?

Ogólnie powinieneś mieć wskaźnik do tablicy w argumencie.

Po mojemu kompilujący się kod powinien wyglądać tak:

#include using namespace std;

(Razi) #7

Jest dozwolony taki argument, moim zdaniem jest on znacznie czytelniejszy od *tab, bo * sugeruje konkretny wskaźnik, a [] (przy jednowymiarowej rozmiaru nie trzeba podawać) sugeruje od razu całą tablicę.

Masz funkcję main w ogóle? Zwróć uwagę na wielkość liter. No i to ma być int main(), ew. int main(int argc, char *argv[]), a nie jakieś visualowe (bo może skopiowałeś z neta, a kompilujesz pewnie w starym MinGWie, albo Cygwinie) wygibasy typu _tmain, czy jak to tam jeszcze udziwnili.


(Drobok) #8

Rzeczywiście twoim sposobem również działa ;]

#include using namespace std;

(Sawyer47) #9

@drobok

int main()

{

    szukaj(t,0,9,3);

    return 0;

}