1

これは、C++ を使用したオブジェクト指向プログラミング クラスの課題です。このプログラムでは、ある関数で初期化された静的ポインターに別の関数からアクセスできる必要があります。具体的には、「入力」関数から「割り当て」関数で初期化されたポインタ x にアクセスできるようにしたいです。誰かが尋ねる前に、私はグローバル変数を使用することを許可されていません。

#include <iostream>
using namespace std;

void allocation()
{
    static int *pointerArray[3];
    static int **x = &pointerArray[0];
}

bool numberCheck(int i)
{
    if(i >= 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void input()
{
    int input1,input2;
    cout << "Input two non-negative integers.\n";

    cin >> input1;
    while(!numberCheck(input1))
    {
        cout << "You typed a non-negative integer. Please try again.\n";
        cin >> input1;
    }
    cin >> input2;
    while(!numberCheck(input2))
    {
        cout << "You typed a non-negative integer. Please try again\n";
        cin >> input2;
    }
    // Here I'd like to access pointer x from the allocation function 
}


int main()
{
    allocation();
    input();    
    return 0;
}
4

1 に答える 1

1

allocationこれは、関数自体の協力なしに移植可能な方法で行うことはできません。

スコープ ルールはx、実際のallocation関数の外部からの使用を防ぎます。その期間は関数の外にある (静的である) かもしれませんが、そのスコープ (つまり、その可視性) はそうではありません。

一部の実装で使用できるハックがあるかもしれませんが、言語を学習する場合は、どこでも機能しないトリックに頼るのではなく、言語を適切に学習することをお勧めします。

どういうわけか関数を変更することが許可されている場合allocation、私は次のようなものを調べます:

void allocation (int ***px) {
    static int *pointerArray[3];
    static int **x = &pointerArray[0];
    *px = x;
}
:
int **shifty;
allocation (&shifty);
// Now you can get at pointerArray via shifty.

それは少なくともグローバルを使用しなくても移植可能ですが、それも許可されないと思います。

于 2013-09-11T04:16:43.247 に答える