Ошибка переназначения полей с использованием методов в одном классе - PullRequest
0 голосов
/ 28 января 2020

Я занимаюсь разработкой относительно базового 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, но я не получаю никаких ошибок компиляции или выполнения. Чего мне не хватает?

1 Ответ

0 голосов
/ 28 января 2020

Если вы игнорируете свои классы и увеличиваете свой код, сводится к:

double m;
if (condition){
    m = 6.6335209e-26;
}
else{
    m = 0.0;
}
m = 7.0;

Независимо от того, что condition, значение, установленное в ваших if или else операторах, будет перезаписано m = 7.0.

...