2009-05-05 12 views
0

私は、.txtの一部を取得し、それを整数に変換して変数に格納することは可能ですが、それを単一の宣言で行うことは可能です。 (変数はグローバルである必要があります)。.txtのポイントで文字/文字列を返す関数はありますか?

すなわち:

[data.txt] 
1020 
[convert_data.cpp] 
#include<fstream> 
fstream convert("data.txt"); 
//way to declare something equal to A PARTICULAR POINT in data.txt 

int main() 
{ 
    //how would I take this block of code and simplify it to two DECLARATIONS (not 
    //function calls), or, if that's not possible or not practical, how would I make 
    //n and m (or var1 and var2) global AND CONSTANT? 
    char var1[5]; 
    convert.getline(var1,2); 
    char var2[5]; 
    convert.getline(var2,2); 
    const int n=atoi(var1); 
    const int m=atoi(var2); 
    return 0; 
} 

答えて

0

いいえ、1つの宣言ではできません。それを行う関数を書くことができますし、その関数でローカル変数を初期化できますが、グローバル変数を初期化することはできません。グローバル変数を初期化する場合は、プログラムの初期化ルーチン中に明示的に行うか、グローバルオブジェクトのコンストラクタで行うことができます(推奨されません)。

+0

実際には、グローバル宣言で使用する関数を作ることは、私が必要とするものと正確には同じです(擬似母音は意図しない)。 –

0

コンパイラの観点から、定数は、コンパイル時に固定値を持っているものです。テキストファイル(プログラムがコンパイルされた後に変更可能)からデータを読み込んでいるので、テキストファイルから読み込んだ数値をプログラムの定数にすることはできません。

あなたは はこのような何かを行うことができ、と述べた:

class ConstInteger { 
public: 
    ConstInteger(fstream &f) { 
     char s[5]; 
     f.getline(s,2); 
     value = atoi(s); 
    } 
    public operator int() const { return value; } 
private: 
    int value; 
}; 

fstream convert("data.txt"); 
ConstInteger n(convert); 

は、上記のC++コンパイラはグローバルクラスの場合と初期化に依存しています。このため、クラスの初期化順序に関しては、C++コンパイラが大部分を占めています。また、この構成におけるエラー処理は面倒である。 (たとえば、data.txtが存在しない場合はどうなりますか?)

+0

上記のコードでは、nとmが定数であり、両方がファイルから読み込まれていたため、完全に真ではありません。私はそれを単一の宣言に短縮し、グローバル化する方法を探しています。 –

+0

私はそれを実現します。私は1つの整数の例を挙げました。あなたは、私の例を2つの整数に自由に適用することができます。 –

+0

1つの翻訳単位内では、グローバルコンストラクタが宣言された順序で呼び出されることがC++標準によって保証されています。 –

0

私が正しく理解していれば、テキストファイルの一部を読み込み、その値を定数として保存しますか? 初期化されていない定数を持つことはできません。実行時に割り当てるグローバル宣言です。

これは、say関数getConstantという静的変数を含むことができる関数をカプセル化し、getConstantを呼び出すと、ファイルからvarが読み込まれているかどうかをチェックしますファイルから読み込まれなければ定数を返します。レイジー評価。もちろん、これは(?)を必要とする問題を解決するものではありません。

関連する問題