выражение должно иметь указатель на тип функции

Я довольно новичок в C ++ и пытаюсь научиться использовать указатели. У меня есть следующий файл, который создает координаты, а затем перемещает их в случайных направлениях, используя генератор случайных чисел.

Значение sigmaf_point вводится из текстового файла:

 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];
}

Который я затем использую в другой функции:

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);
}
}

ords_fluid создается в основном файле примерно так:

double **coords_fluid = new double*[5000];

Теперь проблема в sf1 = sigmaf_point (ordins_fluid [i] [3]);

Я получаю ошибку «выражение должно иметь указатель на тип функции» для sigmaf_point. Я немного запутался по этому поводу, я знаю, что это как я вызываю переменную, но не могу исправить это.

ура

-1

Решение

Прежде всего: ссылки на указатели совершенно бесполезны, так как указатель уже является своего рода ссылкой.
Так что меняй double *& в double * или же double &, Это будет быстрее.

Кроме того, я вижу, что вы используете sigmaf_point как функция и как массив.
Который из них?
Не могли бы вы дать декларацию sigmaf_point?

Предполагая, что это изменение массива

sf1 = sigmaf_point(coords_fluid[i][3]);

в

sf1 = sigmaf_point[coords_fluid[i][3]];
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector