2012-05-20 109 views
0

我將CSimpleIniA包裝在Config類中以管理'config.ini'文件中的配置選項。CSimpleIniA - 包裝類的方法不讀取配置文件的值

在我提供的示例中,在Config構造函數中讀取了sample_size。 調用readSampleSize()時,返回配置文件的值。

相反,readInitialPos()應該(我所期望的)能夠讀取config.ini並返回值inital_pos。相反,它會返回默認值,第三個參數70000

我不明白爲什麼第二種方法不起作用。

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(); 
} 

回答

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

這是一個錯誤。你當地的ini變量隱藏了班級的ini成員。因此,您的readInitialPos()方法使用您從未稱之爲LoadFile()的CSimpleIniA對象。

只需將其刪除即可修復該錯誤。

Fwiw,避免使用.ini文件,它們非常昂貴。讀取一個值需要大約50毫秒。

+0

謝謝,沒有看到。關於你的最後一段,你提出什麼建議而不是.ini文件? – Luis