Je suis assez nouveau en C++ et j'essaie d'apprendre à utiliser des pointeurs. J'ai le fichier suivant qui crée des coordonnées, puis les déplace dans des directions aléatoires en utilisant un générateur de nombres aléatoires.L'expression doit avoir un pointeur vers le type de fonction
La valeur sigmaf_point est introduite à partir d'un fichier texte:
void methane_coords(double *&sigmaf_point)
double dummy_int = 1;
string dummystring;
string s;
ifstream Dfile;
std::stringstream out;
out << 1;
s = out.str() + ".TXT";
Dfile.open (s.c_str());
if (Dfile.fail())
{
return;
}
for (int i=0; i<dummy_int; i++)
{
Dfile >> sigmaf_point[i];
}
que j'utilise alors dans une autre fonction:
double initial_energy(double **coords_fluid, const double *box_size){
// Loop over all pairs of atoms and calculate the LJ energy
double total_energy = 0;
for (int i = 0; i <= n_atoms-1; i++)
{
sf1=sigmaf_point(coords_fluid[i][3]);
ef1=epsilonf_point(coords_fluid[i][3]);
// Energy fluid-fluid
for (int j = i+1; j <= n_atoms-1; j++)
{
sf2=sigmaf_point(coords_fluid[j][3]);
ef2=epsilonf_point(coords_fluid[j][3]);
double delta_x = coords_fluid[j][0] - coords_fluid[i][0];
double delta_y = coords_fluid[j][1] - coords_fluid[i][1];
double delta_z = coords_fluid[j][2] - coords_fluid[i][2];
// Apply periodic boundaries
delta_x = make_periodic(delta_x, box_size[0]);
delta_y = make_periodic(delta_y, box_size[1]);
delta_z = make_periodic(delta_z, box_size[2]);
// Calculate the LJ potential
s=(sf1+sf2)/2.0;
e=pow((ef1*ef2),0.5);
double r = pow((delta_x*delta_x) + (delta_y*delta_y) +
(delta_z*delta_z),0.5)/s;
double e_lj = 4*((1/pow(r,12.0))-(1/pow(r,6.0))/e);
total_energy = (total_energy + e_lj);
}
}
coords_fluid est créé dans le fichier principal comme ceci:
double **coords_fluid = new double*[5000];
Maintenant, le problème est avec sf1 = sigmaf_point (coords_fluid [i] [3]); J'ai l'erreur "l'expression doit avoir un pointeur sur le type de fonction" pour sigmaf_point. Je suis un peu confus à ce sujet, je sais que c'est à propos de la façon dont j'appelle la variable, mais je n'arrive pas à la résoudre.
Vive
pouvez-vous fournir un [sscce] (http://sscce.org/)? – Default
quand je google le message d'erreur, je trouve beaucoup d'informations. Quelle enquête avez-vous faite pour résoudre ce problème? – Default