0

我将CSimpleIniA包装在 Config 类中以管理“config.ini”文件中的配置选项。

在我提供的示例中,在构造函数sample_size中读取。Config调用时readSampleSize(),返回配置文件的值。

相比之下,readInitialPos()应该(我所期望的)能够读取config.ini并返回inital_pos. 相反,它返回默认值,即第三个参数70000

我不明白为什么第二种方法不起作用。

配置文件

class Config {

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

    unsigned long int readSampleSize ();

    CSimpleIniA ini;

    Config ();
};

配置文件

#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 回答