0

「config.ini」ファイルで構成オプションを管理するために、CSimpleIniAを Config クラスにラップしました。

私が提供する例では、コンストラクターsample_sizeで読み取られます。ConfigreadSampleSize()呼び出されると、構成ファイルの値が返されます。

対照的に、readInitialPos()(私が期待したことは) を読み取ってconfig.iniの値を返すことができるはずですinital_pos。代わりに、デフォルト値である 3 番目の引数を返します70000

この 2 番目の方法が機能しない理由がわかりません。

config.hpp

class Config {

private:
    unsigned long int sample_size;  
public:
    unsigned long int readInitialPos ();

    unsigned long int readSampleSize ();

    CSimpleIniA ini;

    Config ();
};

config.cpp

#include "../include/config.hpp"

Config::Config () 
{
    CSimpleIniA ini;
    int error_nr = ini.LoadFile("config/config.ini");
    if ( error_nr ) {
        cout << "Error " << error_nr << " opening config.ini file." << endl;
        exit(3);
    }
    sample_size = ini.GetLongValue("Rock", "sample_size", 50);
}

unsigned long int Config::readInitialPos ()
{
    return ini.GetLongValue("Rock", "initial_pos", 70000);
}   

unsigned long int Config::readSampleSize ()
{
    return sample_size;
}

発信者、rock.cpp

void Rock::readConfig ()
{
    Config config;

    initial_pos = config.readInitialPos ();

    sample_size = config.readSampleSize ();
}
4

1 に答える 1

0
Config::Config () 
{
    CSimpleIniA ini;                                     // <== here!
    int error_nr = ini.LoadFile("config/config.ini");
    // etc...
}

それはバグです。ローカルini変数は、クラスの ini メンバーを非表示にします。したがって、readInitialPos() メソッドは、LoadFile() を呼び出したことのない CSimpleIniA オブジェクトを使用します。

削除するだけでバグを修正できます。

Fwiw、.ini ファイルの使用は避けてください。それらは恐ろしく高価です。値の読み取りには約 50 ミリ秒かかります。

于 2012-05-20T18:31:16.507 に答える