09. januar 2006 - 19:36
Der er
24 kommentarer og 1 løsning
Kalde funktion med array
Hvad er det lige jeg gøre galt? Jeg kan ikke kalde funktionen med mit array #include "stdafx.h" double corr2(int *fil, int *image) { return 0; } int _tmain(int argc, _TCHAR* argv[]) { double r; int fil[3][3]; int image[3][3]; fil[1][1]=8; fil[1][2]=1; fil[1][3]=6; fil[2][1]=3; fil[2][2]=5; fil[2][3]=7; fil[3][1]=4; fil[3][2]=9; fil[3][3]=2; image[1][1]=8; image[1][2]=1; image[1][3]=6; image[2][1]=3; image[2][2]=5; image[2][3]=7; image[3][1]=4; image[3][2]=9; image[3][3]=2; r = corr2(fil,image); return 0; } Håber i kan hjælpe.
Annonceindlæg fra Jysk IT
Sikkerhed skal være en del af driften
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
09. januar 2006 - 19:50
#1
1) arrays er altid 0-indexeret 2) double corr2(int *fil, int *image) => double corr2(int **fil, int **image) så kan du medsende dine arrays, som har 2 dimensioner
09. januar 2006 - 19:53
#2
Man kan ikke overføre et 2D (eller 3D eller ...) til en funktion. Hvis array'et altid har samme størrelse kan man putte dem ind i en struct: struct TwoDArray { int Array[3][3]; }; double corr2(TwoDArray* fil, TwoDArray* image) { return 0; } int main(int argc, char *argv[]) { double r; TwoDArray fil; TwoDArray image; fil.Array[0][0]=8; ... image.Array[0][0]=8; ... r = corr2(&fil, &image); return 0; }
09. januar 2006 - 19:57
#3
int **image er en pointer til en pointer, hvilket ikke er et 2D array
09. januar 2006 - 19:58
#4
selvfølgelig kan man overføre et 2D array til en funktion men alle dimensioner undtagen den første skal angives double corr2(int fil[][3], int image[][3])
09. januar 2006 - 20:02
#5
Er ved at skrive noget Matlab kode over i c++ og Matlab er jo one based :-) Til ranglen: Jeg får følgende fejl ved din kode (double corr2(int **fil, int **image)) error C2664: 'corr2' : cannot convert parameter 1 from 'int [3][3]' to 'int ** '
09. januar 2006 - 20:03
#6
Virker med arnes forslag double corr2(int fil[][3], int image[][3]) Men så sender jeg hele arrayet i stedet for en pointer
09. januar 2006 - 20:06
#7
prøv double corr2(int *fil[][3], int *image[][3]) r = corr2(&fil,&image);
09. januar 2006 - 20:12
#8
Denne: double corr2(int fil[][3], int image[][3]) Overfører IKKE array'et men en pointer til array'et. Hvis jeg kører dette får jeg 123 og 321: #include <iostream> double corr2(int fil[][3], int image[][3]) { fil[1][1] = 321; return 0; } int main(int argc, char* argv[]) { double r; int fil[3][3]; int image[3][3]; fil[1][1] = 123; std::cout << fil[1][1] << std::endl; r = corr2(fil,image); std::cout << fil[1][1] << std::endl; return 0; }
09. januar 2006 - 20:13
#9
i min corr2 funktion kan jeg så benytte fil og image sådan ikk int a=*fil[2][2] men en return af a giver så følgende fejl error C2664: 'corr2' : cannot convert parameter 1 from 'int [3][3]' to 'int *[][3]'
09. januar 2006 - 20:55
#10
Ovenstående var til arne. Jeg benytter dette: double corr2(int *fil[][3], int *image[][3]) r = corr2(&fil,&image); Hvis jeg så vil sætte en variabel "res" til fil[3][3] i corr2 funktionen og returnere res så sætter jeg res=*fil[3][3] return res; error C2664: 'corr2' : cannot convert parameter 1 from 'int (*__w64 )[3][3]' to 'int *[][3]'
09. januar 2006 - 20:57
#11
hvis jeg har fortsået Bertel rigtigt så er double corr2(int fil[][3], int image[][3]) faktisk OK til dit brug
09. januar 2006 - 20:58
#12
hvis du vil det andet så prøv int a=(*fil)[2][2];
09. januar 2006 - 20:59
#13
Men men denne kode sender jeg da arrayet og ikke en pointer double corr2(int fil[][3], int image[][3]) Eller har jeg misforstået det?
09. januar 2006 - 21:01
#14
Det burde ikke være nødvendigt med: double corr2(int *fil[][3], int *image[][3]) Brug denne: double corr2(int fil[][3], int image[][3]) Der overføres alligevel en pointer til array'et og ikke array'et
09. januar 2006 - 21:05
#15
ok tak. Hvis jeg lige må spørge om sidste spørgsmål. Hvilken kode skal der til for at finde størrelsen på mit array?
09. januar 2006 - 21:06
#16
Det kan du ikke, det er en "sideeffect" af at der overføres en pointer. Du bliver nødt til at overføre en størrelse også.
09. januar 2006 - 21:10
#17
Men hvad er det så jeg skriver i min main?
09. januar 2006 - 21:11
#18
du sender bare første dimension med som et argument til funktionen
09. januar 2006 - 21:13
#19
Det er jeg med på men kan jeg ikke i min main skrive noget lignende fil.size() eller image.size()
09. januar 2006 - 21:16
#20
Du kan bare bruge: r = corr2(fil,image, 3); Eller r = corr2(fil,image,sizeof(fil)/sizeof(fil[0]));
09. januar 2006 - 21:17
#21
fil og image er ikke class'er så de har ingen .xxx()
09. januar 2006 - 21:18
#22
tak. der er point til alle. mange tak for hjælpen :-)
09. januar 2006 - 21:22
#23
Jeg samler ikke på point.
09. januar 2006 - 21:29
#24
en af de store forskelle på normal standard C++ og MS managed C++ i sidstnævnte kan man faktisk spørge om længden på et array - fordi alle arrays har an fælles basis klasse i førstnævnte har man adressen på det første element - og det er ens eget ansvar at holde styr på hvor mange elementer der er
09. januar 2006 - 21:30
#25
og et svar
Kurser inden for grundlæggende programmering