C++で、コンパイルエラーが – プログラミング – Home

C++で、コンパイルエラーが
 
通知
すべてクリア

C++で、コンパイルエラーが


つくだ
 つくだ
(@つくだ)
ゲスト
結合: 9年前
投稿: 2
Topic starter  

いつもはC言語で書いているのですが、
今回、訳あってC++で書かなければならなくなりました。
Visual Studio 2005をWindows 10の上で動かしています。
ソースコードは(1)ですが、その下の(2)のような
コンパイルエラーになりました。
お手数ですが、どなたか、どこをどう直したらいいか、
教えていただけないでしょうか?

(1)

//定数定義、変数宣言
#define pi2 (8.0 * atan(1.0)) //2π
#define N 1000 //データ点数
#define M 16 //周波数の個数
#define FS 1000.0 //サンプリングの周波数(HZ)
#define sigma 1 //係数のσ
#define limit 0.01 //ガボール減衰の最小値
double data[N]; //信号データ
double result_r[M][N]; //変換結果データ[周は周][時間]実数部
double result_i[M][N]; //変換結果データ[周は周][時間]虚数部
// ψ(t) = 1 / (2 sqrt(π) σ) * exp(-t^2/σ^2) * exp(jωt)

#include <stdio.h>
#include <math.h>

//ガボールウェーブレット変換
void GaborTransform()
{
//16個の周波数のループ
for (int m = 0; m < M; m ++)
{
double f = 2.0 * m; //周波数=0..31HZ
double a = 1.0 / f; //スケールのa=周期
//データ点数分までのループ
for (int p = 0; p < N; p ++)
{
double valr = 0.0;
double vali = 0.0;
//畳み込み積分のループ
for (int n = -p ; n < N - p; n ++)
{
int p1 = p + n; //畳み込み乗算の位置
double t = n / FS / a; //(t-b)/a
double alfa = pi2 * t ; //ωt
//ガボール減衰係数=1 / (2 sqrt(π) σ) * exp(-t^2/σ^2)
double gabor = exp(-t * t / (sigma * sigma)) / (2 * sqrt(pi2) *
sigma);
if (gabor >= limit && 0 <= p1 && p1 < N)
{
//畳み込み乗算:実数、虚数。
valr += data[p1] * gabor * cos(alfa);
vali += data[p1] * gabor * sin(alfa);
}
}
//結果の保存
result_r[m][p] = valr / sqrt(a);
result_i[m][p] = vali / sqrt(a);
}
}
}

//VC++のビューのOnPaint()
void CChildView::OnPaint()
{
CPaintDC dc(this);
//0.2秒毎に、周波数を0,8,16,24,0の順で
//1秒間の正弦波のデータ作成。
double alfa = 0.0;
for (int i = 0; i < N; i ++)
{
if (i >= 800)
data[i] = 0.0;
else
data[i] = 30.0 * sin(alfa);
alfa += (i / 200) * 8.0 * pi2 / FS;
if (i == 0)
dc.MoveTo(i, 40 - (int)data[i]);
else
dc.LineTo(i, 40 - (int)data[i]);
}
//ガボールウェーブレット変換
GaborTransform();

int K = 50;
for (int m = 0; m < M; m ++)
{
int y = 100 + m * 20;
for (int n = 0; n < N; n ++)
{
//瞬時値を表示
int val = (int)result_r[m][n] / K;
//振幅値を表示
//int val = (int)sqrt(result_r[m][n] * result_r[m][n] +
result_i[m][n] * result_i[m][n]) / K;
if (n == 0)
dc.MoveTo(n, y - val);
else
dc.LineTo(n, y - val);
}

CString strF;
strF.Format(LF:%d(HZ), m * 2);
dc.TextOut(1000, y - 4, strF);
}
}


引用解決済
トピックタグ
つくだ
 つくだ
(@つくだ)
ゲスト
結合: 9年前
投稿: 2
Topic starter  

エラーの方は、下記です。

(2)

1>------ すべてのリビルド開始: プロジェクト: Wavelet, 構成: Debug Win32 ------
1>プロジェクト 'Wavelet'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
1>コンパイルしています...
1>Gabor.cpp
1>c:\cs\wavelet\gabor.cpp(52) : error C2653: 'CChildView' : 識別子がクラス名でも
名前空間名でもありません。
1>c:\cs\wavelet\gabor.cpp(54) : error C2065: 'CPaintDC' : 定義されていない識別子
です。
1>c:\cs\wavelet\gabor.cpp(54) : error C2146: 構文エラー : ';' が、識別子 'dc' の
前に必要です。
1>c:\cs\wavelet\gabor.cpp(54) : error C2673: 'OnPaint' : グローバル関数にアクセ
スするための 'this' ポインタがありません。
1>c:\cs\wavelet\gabor.cpp(54) : error C3861: 'dc': 識別子が見つかりませんでした
1>c:\cs\wavelet\gabor.cpp(66) : error C2228: '.MoveTo' の左側はクラス、構造体、
共用体でなければなりません
1> 型は ''unknown-type'' です。
1>c:\cs\wavelet\gabor.cpp(68) : error C2228: '.LineTo' の左側はクラス、構造体、
共用体でなければなりません
1> 型は ''unknown-type'' です。
1>c:\cs\wavelet\gabor.cpp(84) : error C2228: '.MoveTo' の左側はクラス、構造体、
共用体でなければなりません
1> 型は ''unknown-type'' です。
1>c:\cs\wavelet\gabor.cpp(86) : error C2228: '.LineTo' の左側はクラス、構造体、
共用体でなければなりません
1> 型は ''unknown-type'' です。
1>c:\cs\wavelet\gabor.cpp(89) : error C2065: 'CString' : 定義されていない識別子
です。
1>c:\cs\wavelet\gabor.cpp(89) : error C2146: 構文エラー : ';' が、識別子 'strF'
の前に必要です。
1>c:\cs\wavelet\gabor.cpp(89) : error C2065: 'strF' : 定義されていない識別子です。
1>c:\cs\wavelet\gabor.cpp(90) : error C2228: '.Format' の左側はクラス、構造体、
共用体でなければなりません
1> 型は ''unknown-type'' です。
1>c:\cs\wavelet\gabor.cpp(91) : error C2228: '.TextOut' の左側はクラス、構造体、
共用体でなければなりません
1> 型は ''unknown-type'' です。
1>ビルドログは file://c:\CS\Wavelet\Debug\BuildLog.htm に保存されました。
1>Wavelet - エラー 14、警告 0
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

(1) がソースコード全文なら #include 類がまったく足りていない。
MFC ベースの Window Application だよね。
フツーに Wizard を使って MFC Application を作ったのなら

#include stdafx.h
#include なんちゃらview.h
があるソースコードにしないとうまくコンパイル通らないと思われる。

っていうか既にある なんちゃらview.cpp にて OnPaint を実装しよう。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

http://www.kumei.ne.jp/c_lang/indexmfc.html
ここがいいかな?
出来れば読み物がいいですね。
サイトでは頭にはいらないですね。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

http://www-higashi.ist.osaka-u.ac.jp/~k-maeda/vcpp/
骨格が自動で作られるタイプです。
あと、言い忘れましたが、Visual Studio 2005のMFCでWINDOWS10は非対応です。
仮に動作してもマイクロソフト等のサポート・保証がないです。
回答する側も、少なからずバージョンが低いからとしか言いようのない場合もあります。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました