2011-01-03 15 views
0

私は、コードテーブルとそれを通過するいくつかのパラメータに基づいてテーブルルックアップを実行する別の関数を生成する関数を作成しました。例えば。C++スコープ外問題

generateCodeTable(int x, int y); 

tablelookup(int z); 

私はちょうどgenerateCodeTable関数によって作成された変数がスコープ外であり、()tablelookupによってアクセスすることができないことに気づきました。私はgenerateCodeTable関数を呼び出す前に変数を初期化することでこれを避けることができましたが、それを実装するより洗練された方法があるのだろうかと思っていました。

ありがとうございました

+1

は、これらのクラスのメンバーですか? 'generateCodeTable'は何をしますか - それはローカルコンテナ/グローバルコンテナなどにデータを埋め込みますか?役に立つ答えを提供するためにもっと多くの情報が必要です。 – Nim

答えて

4

多くの方法があります。あなたは両方の機能は、コード表であるパラメータを取り、両方の機能に同じオブジェクトを渡す

をそれとも、データが含まれており、そのコンストラクタでgenerateCodeTable機能を実行し、lookupメンバ関数を持っているCodeTableクラスを作ることができる作ることができますtablelookupの機能を実行します。

+0

+1:これはクラスのためにかなり悲鳴を上げるものです。 – rubenvb

+0

非常に感謝しています。私はクラスについて学ぶ時間を過ごすでしょう。 – Minh

+0

+1。クラスの利点が取られていない場合、C++を使用する点はありません。 – taskinoor

0

メソッドがクラスの一部である場合は、クラスの変数メンバーを作成します。メソッドがクラスの一部ではない場合は、グローバル変数を作成したり、他のものを試す代わりに(すでにチャールズ・ベイリーによって説明されていますが、私は再度書くつもりはありません)、クラスを使用してください。さもなければ、C++を使用する点はありません。

1

あなたはクラスを知っていますか?

struct MyCodeTable 
{ 
    MyCodeTable(int x, int y) 
    { 
    // initialize your table 
    } 

    void lookup(int z) 
    { 
    // to something with your table 
    } 

private: 
    std::map<YourKey, YourValue> table_; // or whatever the type of your table is 
}; 
+0

私たちは同時に答えを書いているようです。あなたは私よりも冗長ですが。それに対して+1。ところで、クラスの代わりに構造体を使用する特定の理由はありますか? – taskinoor

+0

@taskinoor:私は 'public:'行を書く必要はありませんが、それは本当に良い議論ではありません:私は個人的に好む –