2015年3月18日水曜日

クラスで引っかかったこと

 C++でクラスを書く時に引っかかったことを書きます。 クラスの配列メンバは宣言と同時に初期化することができません。そのため、コンストラクタ時に多次元配列でマップを実装しようとしても


Dijkstr::Dijkstr(){
        cost_temp[V][V] = {
  { INF, 2   , 3   , INF , INF },
  {  2 , INF , 4   , INF , 10  },
  {  3 , 4   , INF , 1   , INF },
  { INF, INF , 1   , INF , 2   },
  { INF, 10  , INF , 2   , INF }
 };
}
と記述するとエラーをはいてしまいます。ここで小一時間ぐらい悩んでmemcpy関数の存在を思い出しました。 memcpyの使い方としては memcpy(void *str1,void *str2,size_t len) str2からstr1にlenバイト分コピーするといったものです。 memcpyを用いて


Dijkstr::Dijkstr(){
 static int cost_temp[V][V] = {
  { INF, 2   , 3   , INF , INF },
  {  2 , INF , 4   , INF , 10  },
  {  3 , 4   , INF , 1   , INF },
  { INF, INF , 1   , INF , 2   },
  { INF, 10  , INF , 2   , INF }
 };
 memcpy(cost, cost_temp, sizeof(cost_temp));
 

}
として解決しました。

0 件のコメント:

コメントを投稿