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 件のコメント:
コメントを投稿