I made the following simplified code for the purpose of this question:
typedef struct {
int m; //
particle_t **inparticles; // Pointers to particles pointers
} grid_t;
typedef struct {
double x;
double y;
} particle_t;
void apply_force( particle_t &particle, particle_t &neighbor , double *dmin, double *davg, int *navg)
{
double dx = neighbor.x - particle.x; // do stuff ...
double dy = neighbor.y - particle.y;
}
void apply_grid_force(particle_t &particle, grid_t &bin, double dmin, double davg, int navg)
{
for(int j = 0; j < bin.m; j++) {
apply_force(particle, bin.inparticles[j], &dmin, &davg, &navg);
}
}
// error here: invalid initialization of non-const reference of type ‘particle_t&’ from an rvalue of type ‘particle_t*’
int main()
{
particle_t *particles = (particle_t*) malloc( 10 * sizeof(particle_t) ); // memory for particles pointers
grid_t *grid = (grid_t*) malloc( 5 * sizeof(grid_t) ); // memory for grid pointers
for(int i = 0; i < num_bins; i++) {
grid[i].inparticles = (particle_t**) malloc(3 * sizeof(particle_t *)); // memory for pointers to particles pointers
grid[i].m = 0;
}
apply_grid_force(grid[i].inparticles[j], grid[i], dmin, davg, navg);
// error here: invalid initialization of reference of type ‘particle_t&’ from expression of type ‘particle_t*’
}
How can I pass the poniter to pointer "inparticles" to the function apply_grid_force so I can use the "particle" it is pointing to?
If I am not mistaken the problem is arising from me trying to cast the double-pointer to a pointer (inparticles to particles) but I am not sure how to solve it.