VS2022のC++のコンパイルエラーに関する質問です。 Q1)下記のA,B,Cの各エラーを生成し、正しいコードを お教え頂けますと大変有難いです。 ==================
VS2022のC++のコンパイルエラーに関する質問です。 Q1)下記のA,B,Cの各エラーを生成し、正しいコードを お教え頂けますと大変有難いです。 ================== // ConsoleAppWavelet.cpp #include <stdio.h> /* printf, scanf, NULL */ #include <stdlib.h> /* calloc, exit, free */ #include <string.h> /* memset */ int main() { int len = 32; const int lev = 4, f = 2; double x[len]; //<--A //C2131 式は定数に評価されませんでした double sq2 = 1.41421356 / 2; double g[f] = { sq2,-sq2 }; double h[f] = { sq2, sq2 }; for (int i = 0; i < len; i++) x[i] = i; double* y = calloc(len, sizeof(double)); // //<--B //E0144 型 "void *" の値を使用して型 "double *" のエンティティを初期化することはできません //C2440初期化中': 'void *' から 'double *' に変換できません。 double* t = calloc(len, sizeof(double)); // //<--C //C2440 '初期化中': 'void *' から 'double *' に変換できません。 memcpy(t, x, len * sizeof(double)); // copy x to tmp for (int i = 0; i < lev; i++) { // level counter i memset(y, 0, len * sizeof(double)); int len2 = len / 2; for (int j = 0; j < len2; j++) for (int k = 0; k < f; k++) { y[j] += t[2 * j + k] * h[k]; y[j + len2] += t[2 * j + k] * g[k]; } len = len2; memcpy(t, y, len * sizeof(double)); // copy approximation to t } for (int i = 0; i < 32; i++) printf("%d %f %f\n", i, x[i], y[i]); free(y); free(t); } ================ 以上、宜しくお願いします。
C言語関連・41閲覧・25
ベストアンサー
Aは 配列の確保数はコンパイル時に確定した定数(define定義や const intの変数)が必要だということ B/Cは callocが void* を返すので 左辺の変数の型にキャストしなければならないということ 従って int len = 32; const int CLEN = 32; // 追加 double x[CLEN]; // lenを CLENに変更 ... double* y = (double*)calloc(len, sizeof(double)); //(double*)追加 double* t = (double*)calloc(len, sizeof(double)); //(double*)追加 といった具合です …
質問者からのお礼コメント
毎度お世話になります。 丁寧な回答有難う御座いました。
お礼日時:5/22 14:59