digitalmars.D.learn - conversion error related to array index
- thorstein (33/33) Oct 04 2017 Hi,
- Jonathan M Davis (12/20) Oct 04 2017 Array indices - and array length - are size_t. If you're on a 32-bit sys...
Hi, I get the following compile error with this function below: source\mod_data\matrices.d(66,12): Error: cannot implicitly convert expression (j) of type ulong to uint (66,12) is [j] in row[j] Using uint as type for rows, cols (i.e. the indices) works. Is ulong not allowed for array indices? I could not find the respective information. Thanks! 49 private double[][] matrix_uniform(ulong rows, ulong cols, double lbound, double ubound, ulong precision) 50 { 51 double[][] array; 52 double[] rowT; 53 auto gen = Random(unpredictableSeed); 54 auto rndUniform = uniform(lbound, ubound, gen); 55 56 foreach(ulong i; 0..cols) 57 { 58 rowT ~= 0; 59 } 60 61 foreach(ulong i; 0..rows) 62 { 63 foreach(ulong j; 0..cols) 64 { 65 rndUniform = uniform(lbound, ubound, gen); 66 rowT[j] = to!double(rndUniform) / 10^^precision; 67 } 68 array ~= rowT.dup; 69 } 70 return array; 71 }
Oct 04 2017
On Wednesday, October 04, 2017 09:04:10 thorstein via Digitalmars-d-learn wrote:Hi, I get the following compile error with this function below: source\mod_data\matrices.d(66,12): Error: cannot implicitly convert expression (j) of type ulong to uint (66,12) is [j] in row[j] Using uint as type for rows, cols (i.e. the indices) works. Is ulong not allowed for array indices? I could not find the respective information.Array indices - and array length - are size_t. If you're on a 32-bit system, that's an alias to uint, whereas on a 64-bit system, it's an alias to ulong. In general, code should be using size_t when dealing with arrays not uint or ulong (unless you're talking about having elements of uint or ulong). If you don't use size_t, then you're likely to run into problems when compiling for a different architecture. But if you have a ulong that you need to convert to a uint, then you can always cast or use std.conv.to!uint so long as the number will actually fit in a uint. - Jonathan M Davis
Oct 04 2017