switch (msg){
case WM_LBUTTONDOWN:
char *p = new char[1000];
wsprintf(p, "%d" , i);
MessageBox(hWnd , p , "" , MB_OK);
delete[] p;
break;
がエラーで
switch (msg){
case WM_LBUTTONDOWN:
char *p;
p = new char[1000];
wsprintf(p, "%d" , i);
MessageBox(hWnd , p , "" , MB_OK);
delete[] p;
break;
と
switch (msg){
case WM_KEYDOWN:
if( wParam == VK_RETURN ){
char *p = new char[1000];
wsprintf(p, "%d" , i);
MessageBox(hWnd , p , "" , MB_OK);
delete[] p;
}
break;
ならエラーじゃなかったんだけど、理由がよく分かりません。
case のすぐ下で宣言と同時に値を代入してはいけないんですか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
new char[1000]
は
(char*)malloc(1000)
と同値なので、構文上の間違いはありません。
とにかく、この文をコピーしただけではエラーは起こりえないので、これ以前のコードを補足するか、エラーのあった行を自分で調べるかしてください。
ちなみにifは新しいスコープを作らないので、ブロックであってもその1つ上のスコープをもっています。
例を挙げると、
if(hoge){
int x;
}
if(hoge){
int x; //すでに宣言されているのでエラー
}
while(hoge){
int y;
}
while(hoge){
int y; //違うスコープなのでエラーでない
}
この辺がおそらく原因だと思うのですが・・・。
最近のCは関数のいちばん上でなくとも変数宣言できますが、関数内での変数名の管理上、やはり変数は関数のいちばん上で宣言した方がわかりやすいです。
この回答への補足
ありがとうございます。
でも、やってみると
if(hoge){
int x;
}
if(hoge){
int x; //エラーにならず
}
コンパイルできました。
No.3
- 回答日時:
char *p = newchar[1000];
は明らかにおかしいです!
pはポインタ変数で宣言されてるので &newchar[1000]のように
変数のアドレス値を代入しなければいけません。
値を入れようとするとエラーが出ます。
なので、エラーが出ないといってる2つの例のうち
下のほうはタイプミスでは?
タイプミスがどうか調べてみてください。
No.2
- 回答日時:
case は単にラベルで、ラベル以降、同じスコープに
初期化構文を書けなくなるのが仕様です。
switchの場合は、
switch( value ){
int i = 0;
char* p = NULL;
case X:
とすればOKです。
あとブロックを作るか。
No.1
- 回答日時:
VC++を使っているなら、表示されたエラーメッセージをダブルクリックすると、問題となっている文を指摘してくれます。
そうでなくても、コンパイルエラーは何行目がエラーが指摘してくれるので、どこがエラーになっているかは少なくとも自分で確かめたほうがいいでしょう。
少なくとも、この部分だけでは、switch内で変数を宣言し、初期化したことによるエラーはありえません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
On ErrorでエラーNoが0
-
VBA データ(特定値)のある最...
-
実行時エラー'-2147467259(8000...
-
マクロで"#N/A"のエラー行を削...
-
お助けください!VBAのファイル...
-
インポート時のエラー「データ...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
Excel実行時エラー[80004005]に...
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
エクセルVBA 「On Error GoTo...
-
VB6とVB.NETでNullの扱いが違う?
-
Filter関数を用いた結果、何も...
-
UBoundに配列がありませんとエ...
-
【VB.NET】 パワポ操作を非表示で
-
VBAで時間(00:00形式)を積算...
-
オブジェクト型の変数にフォー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
マクロで"#N/A"のエラー行を削...
-
String""から型'Double'への変...
-
お助けください!VBAのファイル...
-
On ErrorでエラーNoが0
-
【VBA】ワークブックを開く時に...
-
エクセルVBA 「On Error GoTo...
-
文字列内で括弧を使うには
-
マクロの「SaveAs」でエラーが...
-
VBAでfunctionを利用しようとし...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
実行時エラー 438 の解決策をお...
-
実行時エラー'-2147467259(8000...
-
Excel vbaについての質問
-
【VB.NET】 パワポ操作を非表示で
-
メールの件名のセットでエラー...
-
バッチファイルで、あるスクリ...
-
LaTeXのエラーについて(コンパ...
おすすめ情報