30. januar 2004 - 20:53
Der er
11 kommentarer og 1 løsning
problemer med at programnavn.o ikke kan findes / compilerproblem?
Hej folks Jeg har lidt problemer med et c-program. Når jeg compiler det med cc får jeg følgende fejl: binarySearch.c: In function `main': binarySearch.c:26: parse error before `int' binarySearch.c:28: `temp' undeclared (first use in this function) binarySearch.c:28: (Each undeclared identifier is reported only once binarySearch.c:28: for each function it appears in.) Hvis jeg så benytter mig af -M flaget ser det umiddelbart ud til at virke, men når jeg så forsøger at køre programmet sker følgende: ./binarySearch: binarySearch.o:: command not found Jeg har ikke nogen .o fil, men hvordan får jeg den? Er det et spørgsmål om at ændre flag på gcc ? Venligst, Morten
Annonceindlæg fra Trustworks
Tillid i en Zero-Trust verden
Med voksende trusler, nye EU-krav og øget kompleksitet er cybersikkerhed nu en central ledelsesopgave på linje med strategi og økonomi.
30. januar 2004 - 20:57
#1
Du skal nok starte med at rette en fejl i linie 25-26.
30. januar 2004 - 21:03
#2
Programmet skulle ikke fejle noget - har fået det af en anden. Jeg kan prøve at smide C-koden her: /* Et bud på binary search - haaber det er rigtigt */ #include <stdio.h> int binarySearch(int arr[], int searchValue, int left, int right); void printArr(int *arr, int length); const int length = 10; int main(void){ int array [] = {2,5,11,13,19,25,30,44,45,55}; int search1 = 13; int search2 = 900; printArr(array, length); printf("searching for value %d\n", search1); int temp = binarySearch(array, search1, 0, 9); if(temp == -9999) printf("item not found\n"); else printf("value found at index: %d\n", temp); printf("searching for value %d\n", search2); temp = binarySearch(array, search2, 0, 9); if(temp == -9999) printf("item not found\n"); else printf("value found at index: %d\n", temp); getchar(); // til ære for mit Dev C++ IDE return (0); } void printArr(int* arr, int length){ int i; for(i = 0 ; i < length ; ++i){ printf("index %d value %d\n", i, *arr); ++arr; } } // end main // returnerer index for søge værdi int binarySearch(int arr[], int searchValue, int left, int right){ if(left == right){ if(searchValue == arr[left]) return left; else return -9999; // hvis det havde været java var der blevet kastet en exception her :( } else{ int mid = (int) (left + right) / 2; if(searchValue == arr[mid]) return mid; // hvis værdien er i midten else{ if(searchValue < arr[mid]) return binarySearch(arr, searchValue, left, mid); else // nødvendigt at tillægge mid 1, da man har afrundet return binarySearch(arr, searchValue, mid+1, right); } } } // end method
30. januar 2004 - 21:08
#3
Prøv at compile med C++ compileren i.s.f. C compileren.
30. januar 2004 - 21:09
#4
Programmet bruger C++ ved at erklære variable midt i den eksekverbare kode.
30. januar 2004 - 22:36
#5
Hmm... okay. Smider lige noget andet kode, som jeg heller ikke kan få til at spille, hvis du vil se lidt på det :-) Det er noget dining philosophers, hvis du kender den. Det skulle gerne være alm. C-kode, men jeg tager måske fejl igen? Kan hverken få g++ eller gcc til at compile den, så den kan afvikles.. #include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/sem.h> #include <sys/ipc.h> #define N 5 #define LEFT (i-1)%N #define RIGHT (i+1)%N #define THINKING 0 #define HUNGRY 1 #define EATING 2 #define FREE 3 #define MUTEX 0 void up(int); void down(int); union semun { int val; struct semid_ds *buf; unsigned short int *array; }; struct shared { int chair[6]; }; pid_t pid; //indeholder childprocess id union semun sem_union; //parameter til semctl() kaldet int j; int sem_id; int shm_id; void *share = (void *) 0; struct shared *shared_chairs; void filosof(int i) { while(1) { think(i); take_forks(i); eat(i); put_forks(i); } } take_forks(int i) { printf("filosof %d prøver at tage gafler\n", i); down(MUTEX); shared_chairs->chair[i]=HUNGRY; test(i); up(MUTEX); down(i); } put_forks(int i) { printf("filosof %d prøver at lægge gafler\n", i); down(MUTEX); shared_chairs->chair[i]=THINKING; test(left(i)); test(right(i)); up(MUTEX); printf("filosof %d har lagt gafler\n", i); } test(int i) { //int r; //for (r=1;r<6;r++) //printf("%d ",shared_chairs->chair[r]); if (shared_chairs->chair[i]==HUNGRY && shared_chairs->chair[left(i)] != EATING && shared_chairs->chair[right(i)] != EATING) { shared_chairs->chair[i] = EATING; up(i); printf("filosof %d har taget gafler\n", i); } } eat(int fil) { printf("filosof på stol %d spiser\n", fil);fflush(stdout); sleep(rand()%3); } think(int fil) { printf("filosof på stol %d tænker\n", fil);fflush(stdout); sleep(2); } void del_sem() { int i; //bruges i løkken der sletter alle semaforene union semun sem_union; for (i=0;i<7;i++) semctl(sem_id, i, IPC_RMID, sem_union); } void down(int sem_nummer) { struct sembuf sem_b; sem_b.sem_num = sem_nummer; sem_b.sem_op = -1; //down el. P() sem_b.sem_flg = SEM_UNDO; semop(sem_id, &sem_b,1); } void up(int sem_nummer) { struct sembuf sem_b; sem_b.sem_num = sem_nummer; sem_b.sem_op = 1; //up el. V() sem_b.sem_flg = SEM_UNDO; semop(sem_id, &sem_b,1); } int main() { int i; shm_id = shmget((key_t)1235, sizeof(struct shared), 0666 | IPC_CREAT); sem_id = semget((key_t)1234,6, 0666 | IPC_CREAT); share = shmat(shm_id, (void *) 0, 0); printf("Mem att at %X\n\n", (int) share); shared_chairs = (struct shared *) share; shared_chairs->chair[1]=FREE; shared_chairs->chair[2]=FREE; shared_chairs->chair[3]=FREE; shared_chairs->chair[4]=FREE; shared_chairs->chair[5]=FREE; sem_union.val = 1; semctl(sem_id, 0, SETVAL, sem_union); sem_union.val= 0; for (i=1;i<6;i++) semctl(sem_id, i, SETVAL, sem_union); for (j=1;j<N+1;j++) { pid=fork(); if (pid==0) { filosof(j); } else { } } } int left(int i) { if(i==1) return N; else return i-1; } int right(int i) { if(i==N) return 1; else return i+1; }
30. januar 2004 - 22:44
#6
Hvilke fejl får du ? Mit gæt er at du får nogle unresolved symbols fordi du mangler at linke mod nogle libraries.
30. januar 2004 - 22:45
#7
Med hensyn til den første kode, så bør det være pærenemt at flytte de 2 erklæringer op så den kan compiles som C kode.
30. januar 2004 - 23:06
#8
Følgende fejl opstår ved forsøg på at compile således: gcc -o dining dining_shmem.c dining_shmem.c: In function `main': dining_shmem.c:153: warning: assignment makes pointer from integer without a cast
30. januar 2004 - 23:15
#9
Det er kun en warning.
30. januar 2004 - 23:18
#10
Men et sted i koden (linie 153 eller tæt på) står der: pointer variabel = integer værdi
16. februar 2004 - 22:10
#11
OK ?
16. februar 2004 - 22:14
#12
Det virkede 10 min. efter, hvor jeg prøvede igen. Underligt... Men nok mig, der trængte til mad ;) Du får dog point fordi du svarede...
Kurser inden for grundlæggende programmering