0

現在、.txt ファイルから情報を取得し、後で参照できるように動的に割り当てるプログラムを C++ で作成しています。情報の形式は、(姓名) (給与) (控除) (ボーナス%) です。次のようなヘッダー ファイルに構造体を作成しました。

    struct PayrollInfo
    {
        string first, last;
        float salary, deduction, bonus;
        PayrollInfo *next;
    };

私の問題は、メイン関数によって呼び出される関数内の変数を呼び出すと、変数が「範囲外」であるというエラーがコンパイラから返されることです。メイン関数で構造体ポインタを宣言したため、それらが呼び出された関数に引き継がれるという印象を受けました。これを修正するにはどうすればよいですか? 以下に私のコードを含めました。Open は私が持っている関数で、ファイルを開き、存在する場合は 0 を返します。また、動的メモリ割り当てを使用するのは初めてなので、Read() 関数に目に見えるエラーがある場合はお知らせください。

    main()
    {
         PayrollInfo *head, *tail, *newp, *tmp;
         head = tail = newp = tmp = NULL;

         while(newp = Read() )
         .
         .
         .

    PayrollInfo *Read()
    {
         PayrollInfo *tmp = NULL;
         if (Open() == 0)
         {
              tmp = new PayrollInfo;
              tmp->first = first;
              tmp->last = last;
              tmp->salary = salary;
              tmp->bonus = bonus;
              tmp->deduction = deduction;
         }
         else
              return NULL;
         return tmp;
    }
4

1 に答える 1

0

残念ながら、私は新しいユーザーであるため、コメントすることはできません。またはコメントすることもできます...しかし、あなたのコードで気付いたことが 1 つあります。つまり、first、last、salary、bonus、および deduction という変数を、プログラムの他の場所ではグローバル変数として定義されていないように見えるのに、それらをグローバル変数であるかのように使用しようとしているということです。

Open() 関数がこれらの変数を定義することを意図している場合、そのスコープ外でそれらを使用する場合は、そのスコープ外で行う必要があります。事前にそれらを宣言してから、への参照を受け入れるように Open() 関数を変更します。それらをパラメーターとして変更し、そのように変更すると、探している結果が得られる可能性があります。ただし、現状では、これらの変数はどこにも宣言されていません。それらが Open() 内で宣言されている場合は、問題があります。

Open() 関数のコードと、main() 関数の前のすべて (インクルード、変数定義など) を投稿すると、問題がより明らかになる可能性があります。

于 2013-07-07T23:30:20.537 に答える