0

私は C++ が初めてで、キャッシュ シミュレーターを作成しようとしています。クラス CACHE のコンストラクタは

CACHE (int, int, int, int, CACHE *);   //declare

で、main()いくつかの変数に従ってオブジェクトを作成しようとしています:

int main()
{
       if ( L2_size == 0 )      //only one level of cache   
       {
        CACHE L1(L1_size, blocksize, L1_assoc, inclusion, 0);
       }
       else                     //2 level of caches
       {
        CACHE L2(L2_size, blocksize, L2_assoc, inclusion, 0);
        CACHE L1(L1_size, blocksize, L1_assoc, inclusion, &L2);
       }
}

これに関する問題は、スコープが if...else 内にあるため、L1 と L2 にアクセスできないことです。

その上、私は?: これを実装する演算子ですが、エラーが発生します:

三項演算子に一致しません。

これを行う方法はありますか?ありがとう!

4

2 に答える 2

1

おそらく、次のようなものです。

    CACHE *L2 = 0;
    CACHE *L1 = 0;


    if (L2_size)
    {
        L2 = new CACHE(L2_size, blocksize, L2_assoc, inclusion, 0);
    }
    L1 = new CACHE(L1_size, blocksize, L1_assoc, inclusion, L2);  

他の可能性があると確信しています。

于 2013-02-12T20:40:01.627 に答える
0

std::listステートメントの前またはstd::vector前などのコンテナーを使用して、if必要な数の CACHE オブジェクトを push_back することができます。

例:

int main()
    {
       std::list<CACHE> caches;
       if (L2_size == 0)
       {
          caches.push_front(CACHE(L1_size, blocksize, L1_assoc, inclusion, 0));
       }
       else
       {
          caches.push_front(CACHE(L2_size, blocksize, L2_assoc, inclusion, 0);
          caches.push_front(CACHE(L1_size, blocksize, L1_assoc, inclusion, &(*caches.begin());
       }
    }

どちらの方法を使用する場合でも、ステートメントの前にスタック変数 ( 、 、またはその他のもの) を作成して、スコープ内に留まるようにすることをlistpointer勧めします。if

于 2013-02-12T20:40:10.457 に答える