Hi I am trying to init an object with a double value in the format double filter[3][3]; but i keep getting the following error.
cannot convert \'double[3][3]\' to \'
A two-dimensional array is not the same thing as a pointer-to-a-pointer. You have two choices - change the filter
class to contain a 2D array, or change your initialization to use pointer-to-pointers.
In choice #1, you're could keep a copy of the array in your filter
instance, instead of just holding a pointer. You need to change the class interface:
@interface filter : NSObject
{
double matrix[3][3];
}
-(id)initWithMatrix:(double[3][3])filterMatrix;
Then your implementation of initWithMatrix:
can just do a memcpy()
or the equivalent to copy the data into your instance.
Choice #2 is a bit different. Keep your other code the way it is, but change your initialization of filter
:
double row0[3] = {0,0,0};
double row1[3] = {0,1,0};
double row2[3] = {0,0,0};
double **filter[3] = { row0, row1, row2 };
It's probably safer to malloc()
all of those arrays, since otherwise you're going to end up with references to stack variables in your filter
class, but I think you get the idea.
That's because double**
isn't the equivalent of double[*][*]
. In fact, double[*][*]
is an invalid type, because it leaves the stride undefined. double**
is a pointer to a pointer to a double, or to put it another way, it's a pointer to an array of doubles. You should just use double*
as your type.
Edit: To clarify, double[*][3]
is still just an array of doubles, even though it has 2 dimensions. This is still the equivalent of double*
.
you are passing as a parameter a double 2d array(double[][]) when your method signature asks for a double (a primitive like 34.2). set the method declaration to
- (id)initWithMatrix:(double*) matrix;
this passes a pointer to your array (2d) to the method. edit: missed a semicolon.