У меня есть функция, определенная в файле заголовка prog.h, которая принимает пару аргументов типа bool, string и double.Неверное значение bool, переданное функции в C++
string createDataFolder(bool setPBC, string distribution, double timestep, double simtime, double potRange, double potStrength,
double particlesize, bool steric, bool ranRod, bool ranU, bool rand, double dvar, double polydiam, bool Pointq){
//...
if (Pointq) folder += "/pointq";
//....
return folder;
}
Когда я вызвать функцию внутри моей основной функции() в prog.cpp через
string folder = createDataFolder(setPBC, distribution, timestep, simtime, urange, ustrength,
particlesize, includeSteric, ranRod, ranU, rand, dvar, polydiam, Pointq);
: параметр BOOL Pointq
всегда передается как false
, независимо от того, если он установлен в true
или false
, даже если я вызываю функцию как
string folder = createDataFolder(setPBC, distribution, timestep, simtime, urange, ustrength,
particlesize, includeSteric, ranRod, ranU, rand, dvar, polydiam, true);
Если изменить определение функции определения и са ll, так что есть еще один параметр после Pointq
, тогда Pointq
передается правильно, а также последний параметр.
string createDataFolder(bool setPBC, string distribution, double timestep, double simtime, double potRange, double potStrength,
double particlesize, bool steric, bool ranRod, bool ranU, bool rand, double dvar, double polydiam, bool Pointq, bool tmp){
//...
if (Pointq) folder += "/pointq";
//....
return folder;
}
string folder = createDataFolder(setPBC, distribution, timestep, simtime, urange, ustrength,
particlesize, includeSteric, ranRod, ranU, rand, dvar, polydiam, Pointq, true)
Если изменить порядок последних двух аргументов функции createDataFolder
, она работает хорошо.
string createDataFolder(bool setPBC, string distribution, double timestep, double simtime, double potRange, double potStrength,
double particlesize, bool steric, bool ranRod, bool ranU, bool rand, double dvar, bool Pointq, double polydiam){ ... }
Я предполагаю, что есть глупая ошибка в моем коде, но я не знаю, где искать, так как у меня нет интуиции, как может произойти такая ошибка. Я искал форум для чего-то подобного в C++, но я ничего не смог найти.
Было бы здорово, если бы кто-нибудь мог предоставить мне некоторые идеи или указать мне соответствующую тему.
EDIT
Вот минимальный пример, который до сих пор производит ошибку на моей машине
#include <iostream>
using namespace std;
void createDataFolder(double potRange, bool Pointq){
char range[5];
sprintf(range, "%.3f", potRange);
cout << "in createDataFolder Pointq is " << Pointq << endl;
}
int main(int argc, const char* argv[]){
bool Pointq = true;
double urange = 10;
cout << "In main(), Pointq is " << Pointq << endl;
createDataFolder(urange, Pointq);
return 0;
}
Как вы отлаживаете это? –
попытайтесь уменьшить ваш пример до минимума, чтобы он все еще мог воспроизводиться. Вероятно, вы поймете свою ошибку во время этого процесса. – Hayt
Устраните проблему до [MCVE]. Вам не нужно 90 000 параметров функции для тестирования и демонстрации поведения только одного. –