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 DE-CIX
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