Я занимаюсь разработкой относительно базового c кода для моделирования молекулярной динамики, и я решил попробовать смешать немного OOP в первый раз. Мой класс P
содержит основные c поля (масса, положение и скорость) для частиц, и я сгенерирую производные классы для конкретных c потенциальных функций, таких как Леннард-Джонс.
Я сталкиваюсь с проблема с функцией setSpecies
; моя цель в том, чтобы иметь возможность передать химическую формулу или название вида и автоматически установить массу. Тем не менее, я не могу изменить значение m
, за исключением того, что я установил его равным 7:
Ph
#ifndef P_H_
#define P_H_
#include <string>
#include <vector>
using namespace std;
struct P {
static int N; // total number of particles
int n; //particle number
double m; //mass
void setSpecies(string species);
P();
};
#endif
P. cpp
#include "P.h"
#include <algorithm/string/predicate.hpp>
#include <iostream>
using boost::algorithm::iequals;
using namespace std;
void P::setSpecies(string species){
if (boost::iequals(species,"argon") || boost::iequals(species,"Ar")){
m = 6.6335209e-26; //no good
}
else
m = 0.0; // no good
//m = 7.0; // this one works when not commented
};
P::P() {
m = 0.0;
n = N++;
};
Даже попытка переназначить значение в main () ничего не делает:
P atom[10];
for (int i = 0; i < 10; i++){
atom[i].setSpecies("Ar"); \\ no good
atom[i].m = 4.0; \\ no good
}
Я предполагаю, что он должен что-то делать с объектами, находящимися в массиве или, возможно, что я использую boost
, но я не получаю никаких ошибок компиляции или выполнения. Чего мне не хватает?