質問

.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;
}
役に立ちましたか?

解決

いいえ、単一の宣言で行うことはできません。それを行う関数を作成し、その関数でローカル変数を初期化することはできますが、グローバル変数を初期化することはできません。グローバル変数を初期化する場合は、プログラムの初期化ルーチンで明示的に初期化する必要があります。または、グローバルオブジェクトのコンストラクターで初期化することもできます(推奨されません)。

他のヒント

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

それを言って、あなたは次のようなことをできます

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 が存在しない場合はどうなりますか?)

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

おそらくそれを行う方法は、getConstantと呼ばれるグローバル関数にある機能をカプセル化することです。これには静的変数を含めることができ、getConstantの呼び出しは、varファイルから読み込まれていない場合は、定数を返します。遅延評価。もちろん、これは一定である必要があるという問題を解決しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top