2012-02-28 5 views
1

静的constメンバを初期化:以下のコードのデータファイルから

class A 
{ 
public: 
static const int VAL = 3; 
}; 

またはCPPファイルで:

class A 
{ 
public: 
static const int VAL; 
}; 

私はクラス宣言にVALに値を割り当てることができることを知っています

const int A::VAL = 3; 

しかし、私は値をデータファイルから読みたいと思います。

void F() 
{ 
int value = ReadValueFromDataFile(); 

//But I can't do this: 
const int A::VAL = value; //member cannot be defined in the current scope 
} 

はどうやってデータファイルから読み込んだ値に基づいて、VALの値を割り当てることができます。私は今の機能を持っている、のは、私が欲しい値を読み込みFを()を呼び出してみましょうか?

+0

2番目の例では、整数型(std :: stringなどではありません)にのみ適しています。 –

答えて

3

その定義では(宣言ではなく)、関数呼び出しの戻り値で変数を初期化します。

#include <fstream> 
#include <iostream> 

class A 
{ 
public: 
static const int VAL1; 
static const int VAL2; 
}; 

int F(const char*); 

// If you need to separate .H from .CPP, put the lines above 
// in the .H, and the lines below in a .CPP 

const int A::VAL1 = F("1.txt"); 
const int A::VAL2 = F("2.txt"); 

int F(const char* filename) 
{ 
    std::ifstream file(filename); 
    int result = 0; 
    file >> result; 
    return result; 
} 

int main() { 
    std::cout << A::VAL1 << " " << A::VAL2 << "\n"; 
} 
+2

初期化順序の問題に気を付けてください。 –

関連する問題