🐲 Morzan 59 Napisano 2 Styczeń 2017 (edytowane) Niedawno zacząłem programować i co rusz wpadam na jakieś problemy. Jeśli wśród Was znajdzie się ktoś, któ zna się na C, ma za dużo wolnego i miałby ochotę poodpowiadać na parę pytań może liczyć na moją wielką wdzięczność mój aktualny problem to "expected expression before ‘obrazek’" Nie rozumiem dlaczego kompilator nie ma problemu z "void negatyw (obrazek *ob)", ale kiedy przychodzi do wynonania funcji problem się pojawia. (program docelowo ma działać na tablicach dynamicznych) praogram wygląda tak (wersja okrojona): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include <stdio.h> #include "mod5.h" #include <string.h> #include <stdlib.h> #define MAX 512 /* Maksymalny rozmiar wczytywanego obrazu */ #define DL_LINII 1024 int main() { printf("tworzenie negatywu...\n"); negatyw(obrazek *ob); printf("wykonano\n"); return 0; } void negatyw (obrazek *ob) { int i,j; /*od maksymalnej wartsci szarosci odejmuje kazdy element tablicy*/ for (i=0; i<ob->wym_y;++i) { for (j=0; j<ob->wym_x;++j) ob->obraz[j]=ob->odcieni-ob->obraz[j]; } } i plik nagłówkowy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> #include <stdlib.h> #include <string.h> #define DL_LINII 1024 #define MAX 512 typedef struct /*inicjacja struktury zawierającej odcienie, wymiary i adres tablicy*/ { int wym_x, wym_y, odcieni; int **obraz; } obrazek; void negatyw (obrazek *ob); Będę straszliwie wdzięczny za każdą pomoc edit: racja jest bardziej czytelne, ale za to krzaczy forum ;/ Edytowane 3 Styczeń 2017 przez Morzan Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Misiek 30 Napisano 2 Styczeń 2017 (edytowane) Na przyszłość użyj http://www.wklej.org/ lub czegoś podobnego, aby innym lepiej sie czytalo. Tu jest twój problem negatyw(obrazek *ob); Do funkcji musisz przekazać adres w pamięci do obrazka(do pozyskania adresu z pamięci używasz & przed zmienną). Czyli: struct obrazek ob; negatyw(&ob); Edytowane 2 Styczeń 2017 przez Misiek 2 Nebthtet i Morzan dodali reakcje Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
🐲 Morzan 59 Napisano 3 Styczeń 2017 (edytowane) @Misiek Rozmumiem, że przy wysyłaniu trzeba wpisać adres, ale niewiem o co chodzi z "struct obrazek ob;" Ani gdzie to wpisać ani czemu miałoby to służyć w tym przypdaku. Edytowane 3 Styczeń 2017 przez Morzan Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Misiek 30 Napisano 3 Styczeń 2017 struct obrazek ob; Służy deklaracji zmiennej o nazwie "ob", którą możesz przekazać do funkcji. Bo w twoim przypadku nic nie przekazujesz. Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
🐲 Morzan 59 Napisano 3 Styczeń 2017 Dalej nie rozumiem o co Ci chodzi. Próbowałem do tego podejść na parę różnych sposobów i to daje najmniej błędów. Mianowicie tylko storage size of ‘ob’ isn’t known. Stworzyłem nową strukturę i z tego co rozumiem nie pokrywa się z tą która ma otrzymać dane. teraz wygląda tak biblioteka #include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct /*inicjacja struktury zawierającej odcienie, wymiary i adres tablicy*/{ int wym_x, wym_y, odcieni; int **obraz; } obrazek;void negatyw(obrazek *ob); kod #include <stdio.h>#include "mod5.h"#include <string.h>#include <stdlib.h> int mian (){printf("tworzenie negatywu...");struct obrazek ob; /*zmiana*/printf("wykonano");negatyw(&ob); return 0;}void negatyw(obrazek *ob){ int i,j; /*od maksymalnej wartsci szarosci odejmuje kazdy element tablicy*/ for (i=0; i<ob->wym_y;++i) { for (j=0; j<ob->wym_x;++j) ob->obraz[i][j]=ob->odcieni-ob->obraz[i][j]; }} Ciężko mi znaleźć jakiś konwenter, który nie obędzie krzaczył forum, ani się nie rozjedzie :/ Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Misiek 30 Napisano 3 Styczeń 2017 (edytowane) #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct /*inicjacja struktury zawierającej odcienie, wymiary i adres tablicy*/ { int wym_x, wym_y, odcieni; int **obraz; } obrazek; void negatyw(obrazek *ob) { int i, j; /*od maksymalnej wartsci szarosci odejmuje kazdy element tablicy*/ for (i = 0; i<ob->wym_y; ++i) { for (j = 0; j<ob->wym_x; ++j) ob->obraz[i][j] = ob->odcieni - ob->obraz[i][j]; } } int main() { printf("tworzenie negatywu..."); obrazek ob; /*zmiana*/ printf("wykonano"); negatyw(&ob); return 0; } Powyższy kod odpalilem w gcc i sie skompilowal bez problemu. Edytowane 3 Styczeń 2017 przez Misiek 1 Morzan dodał reakcję Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
🐲 Morzan 59 Napisano 3 Styczeń 2017 Nie ma struct przed obrazek ob. Wielkie dzięki. Nie wiem, czy sam bym do tego doszedł. Pozostaje mi sprawdzić, czy po zaimplementowaniu tego program będzie działać. Mam napisać, jeśli wszystko będzie działało poprawnie? I mam nadzieję, że nie zająłem za dużo czasu Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach