私は関数bool、stringとdoubleの2つの引数を取るヘッダファイルprog.hに関数を定義しています。ブールパラメータPointq
は常にfalse
として渡されC++の関数に渡された不正なbool値
string folder = createDataFolder(setPBC, distribution, timestep, simtime, urange, ustrength,
particlesize, includeSteric, ranRod, ranU, rand, dvar, polydiam, 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){
//...
if (Pointq) folder += "/pointq";
//....
return folder;
}
私はprog.cppでの私のmain()関数内から関数を呼び出し、それがtrue
に設定されている場合に関係なく、か私は関数定義とCAの定義を変更した場合、私は
string folder = createDataFolder(setPBC, distribution, timestep, simtime, urange, ustrength,
particlesize, includeSteric, ranRod, ranU, rand, dvar, polydiam, true);
としての機能を呼び出す場合でもfalse
、 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
関数の最後の2つの引数の順序を変更すると、同様に機能します。私は直感を持っていないので、このようなエラーが発生する可能性がどのように、
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]に絞り込みます。 1つだけの動作をテストして実証するために、90,000の関数パラメータは必要ありません。 –