■過去ログ置き場に戻る■ 1- 前250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part10
751 名前:デフォルトの名無しさん :04/02/21 12:33
>>749
コントロールのやつなら、
やはり>>750のツールバータブで
「コントロール」をチェックすると表示されますた。

752 名前:デフォルトの名無しさん :04/02/21 12:34
>>750
表示されました。本当にありがとうございました。

753 名前:デフォルトの名無しさん :04/02/21 13:08
>>745
デフォルトでは多重宣言になるよ。
しかし、この拡張機能だけをOFFにすることができる。
ほかにも、特定の警告をOFFに出来たりする。
便利。

つか、可能ならさっさと乗り換えた方がいいと思うが。

>>747
Cでも最新ならできるんじゃないのか?

754 名前:デフォルトの名無しさん :04/02/21 13:14
>>753
>Cでも最新ならできるんじゃないのか?

ブロックの先頭以外の変数定義って駄目じゃ無かった?


755 名前:753 :04/02/21 13:39
>>754
C99で参照前なら先頭でなくても良くなった。
今手元に規格書無くて正確なソースが示せないが。

ま、Cスレネタだな。
VCなら.cでも以前から通るだろ?


756 名前:デフォルトの名無しさん :04/02/21 13:40
>>753
多重宣言ってコンパイルエラーってこと?
stroustrupも認めている書き方なのに
デフォルトで使えないとはねぇ。

乗り換えたいけど金が厳しいのも事実。
VS,NET Pro 10万円は高いよー。


757 名前:デフォルトの名無しさん :04/02/21 13:51
>>755
( ・∀・)つ〃∩ ヘェ〜ヘェ〜

>VCなら.cでも以前から通るだろ?

通らない。


758 名前:753 :04/02/21 14:30
>>756
そう。
VC6だとMS拡張をOFFすれば、規格通りになったんだっけ?
まー、自社の旧Verとの互換性の方が大事だからデフォルトで拡張が有効なのは当然といえば当然。

ループを抜けた後でカウンタを参照するのに便利だからってことらしいんだけど、
ブロック先頭でしか宣言できなかったCからの流れだとそれが自然に出来てたから、その流れなのかも。

>>757
( ・∀・)つ〃∩ ヘェ〜ヘェ〜
.cでも//コメントとか使えるのにな。


759 名前:デフォルトの名無しさん :04/02/21 15:05
>>758
> .cでも//コメントとか使えるのにな。

// 形式のコメントは使えても、ソースの意味が変わらない (例外あるか ?) からいいけど、for(int i 〜) はプログラムの意味が変わってしまうことがあるからな。

static int i;

static void foo()
{
 for(int i = 0; i < 10; i++){ 〜 }
if(i == 0){ 〜 }
}

常にコンパイルエラーになるなら、被害は少ないんだが...。

760 名前:貧乏紙 :04/02/21 17:43
VC++でDDXだっけ?ダイアログの値を持ってくるやつ。
UpdateData(true);
UpdateData(false);
のやつで、グローバル変数のint配列に入れてSerialize(CArchive& ar)で読みたいのですが
ダイアログのボタン押して配列にセットまではできたのですが、Serialize(CArchive& ar)から
みると値が入っていないんですよ。
僕の考えではMFCのオブジェクト(○○Appクラスの唯一のオブジェクト)ができた時点の値しか
みえてない。つまり、グローバル変数をプログラム実行中に変えたとしても
Serialize(CArchive& ar)の中では変わってない。と考えてます。どうでしょう。
ちなみのダイアログベースのプログラムに仮想関数の実装でSerialize(CArchive& ar)
を実装してます。

761 名前:デフォルトの名無しさん :04/02/21 18:18
>>666おながい。
これが出た後、1回終了して、
もう1度実行しようとすると、エラーが出て出来ないんですよ。
なぜ?

762 名前:761 :04/02/21 18:22
ちなみにVisual C++6.0で、ブレークポイントなんぞ入れてないし、
スケルトンプログラムを実行するだけで、ほんとーうに時々だけど出るのでエス。

763 名前:デフォルトの名無しさん :04/02/21 18:45
>>761
VCじゃなくて、自作アプリケーションのタイトルバーに
[停止]って出るの? スケルトンでも?


764 名前:761 :04/02/21 18:49
>>763
あ、VCの方です。
いつもは「プロジェクト名 Microsoft Visual C++ [実行]」って
出てるところです。それの[実行]が[停止]になるとです。
スケルトンすらおかしいのかしらん。

765 名前:デフォルトの名無しさん :04/02/21 19:08
デバッガから起動しておいて止まると何が問題なのか?

766 名前:デフォルトの名無しさん :04/02/21 20:27
>>764
ビルド > 実行
で実行してる?

「デバッグの開始」で実行してないよね?

767 名前:761 :04/02/21 21:00
え?最近はじめたばかりなんでよー分からんのですが、
F7押したあとF5押してまつ。これだめ?

768 名前:デフォルトの名無しさん :04/02/21 21:33
たまによくわからんけど混合モードとかで停止する事はあるね。
まあ気にしないで、またF5押せば先進むしw

769 名前:デフォルトの名無しさん :04/02/21 21:38
>>767
F7 -> ビルド
F5 -> デバックの開始
ですね。

通常は「実行」で「停止」はなんらかの原因で
デバッグ中のアプリケーションの実行が停止
した状態です。

どういう原因で停止したか、までは分かりませんが。

デバッグ無しの実行の場合は
ビルド > 実行
もしくは ctrl + F5 です。




770 名前:デフォルトの名無しさん :04/02/22 08:43
>>767
普段はデバッグ実行でいいんじゃないかと。
止まったらコールスタック表示してどの関数で止まったか確認すれば?


771 名前:デフォルトの名無しさん :04/02/22 08:44
バグが発生してプログラムが思うように進まなくなると
彼女とHして現実逃避してます
全然進みません
どうしたらいいのでしょうか?

772 名前:デフォルトの名無しさん :04/02/22 08:52
現実逃避に使われる彼女が可哀想なので別れてください

773 名前:761 :04/02/22 10:14
あー、なんでなんだろう、もう1回スケルトン書き直してみようかなぁ。
それでも出るようだったら、気にしないようにします。
みなさんテンキュ!

774 名前:デフォルトの名無しさん :04/02/22 10:37
エディットボックスの中で正しく改行をする方法を教えて下さい。
ダイアログの中にエディットボックスを作り、次のようにして初期の文字列を
設定していますが、改行コードが文字化けして上手く改行してくれません。

CEdit m_ctrlEdit;
m_ctrlEdit.SetWindowText( "\nTest\nTest\nTest");

リソースエディタでエディットボックスのプロパティもいじり、
「スタイル」タブにおいて、「改行を許可」と「複数行」にもチェックを入れて
あります。
誰かわかる方はいませんでしょうか?

775 名前:デフォルトの名無しさん :04/02/22 11:52
\r\nで。

776 名前:774 :04/02/22 12:04
>>775
ありがとうございます。解決です!

777 名前:デフォルトの名無しさん :04/02/22 13:46

VC.NET2003のMSDNの日本語化の具合はどんなですか?
VC6は、英語ドキュメントが多すぎて
辟易してるんですが。

778 名前:デフォルトの名無しさん :04/02/22 13:48
>>777
日本語化されている部分とされていない部分があります。

779 名前:デフォルトの名無しさん :04/02/22 14:11
>>777
進んでるところも有るが、全体としてはあんまり変わらない気がするな。

C/C++言語規約部分が英語のままなのはちょっとショック。
フィルタを日本語ドキュメントで検索してたら出てこなくて慌てた。


780 名前:デフォルトの名無しさん :04/02/22 14:31
>>778-779
ありがとうございます。
有料でもいいから完全日本語版が欲しいです。


781 名前:デフォルトの名無しさん :04/02/22 16:57
>>780
全文訳業者に発注したら?
金が出せるなら引き受けてくれるだろ

782 名前:デフォルトの名無しさん :04/02/22 17:06
メニューに新しい項目を作ってそのハンドラを作ったのですが何故かハンドラが呼ばれなかったので
調べて見るとResource.hで自分が宣言したIDに割り当てられている数字が小さいのが原因でした。
× #define ID_TEST_PROGRESS 0
○ #define ID_TEST_PROGRESS 131

・ID(コマンド?)に割り当てられる数値の範囲が決まってると推測したのですが
 そのへんのいいドキュメントはありませんか?
・メニューを作るときにID名を決める、Resource.hを編集するという2stepを踏んでるのですが
 正しくはどうやってメニューエディタでIDを割り当てればいいのでしょう?

VC.NETを使っています。
よろしくお願いします。

783 名前:デフォルトの名無しさん :04/02/22 17:34
>>782
VCではResource.hを自分の手で編集するというようなことはほとんどしないよ。
それを自動でやってもらうためのVCなんだし。

リソースのプロパティやなんかでIDを設定すれば適当な値が設定されるはずだが。

784 名前:デフォルトの名無しさん :04/02/22 17:46
>>781
1万までは出すけど、それ以上は出せない。

785 名前:デフォルトの名無しさん :04/02/22 17:49
ハァ?
そんなんじゃVC++.NET Stdすらも買えないじゃねーかよ

786 名前:782 :04/02/22 17:52
>>783
わたしもそう思ってたし、そうできてた気がするんですが
なんで0が設定されるんだろう・・・_| ̄|○

787 名前:デフォルトの名無しさん :04/02/22 17:52
>>782
ウインドウメッセージなら WM_USER + ???? で指定するんだけど、
メニューコマンドも制限あったかな?



788 名前:デフォルトの名無しさん :04/02/22 17:53
>>785
翻訳に1万ってことだって。
文脈で分かりそうなものだが・・・。

789 名前:デフォルトの名無しさん :04/02/22 17:58
>>788
一万程度でできるならさ
MSがやってVCに標準で付けると思わない?

文脈以前の常識の話

790 名前:デフォルトの名無しさん :04/02/22 18:28
>>786
リソースID設定するときに、=0つけちゃったんじゃないの?

791 名前:デフォルトの名無しさん :04/02/22 18:46
IDの話ついでに
VC7には「シンボルブラウザ」というやつがないのかな?
見当たらないんだが

792 名前:デフォルトの名無しさん :04/02/22 19:33
>>789
そういうもんかな。
俺はまたMSが嫌がらせでやってるのかといぶかしんでるが。(w

一人1万でもユーザー1万人くらいはいるだろ?
そうすると1億程度の収入にはなるはずだが。



793 名前:デフォルトの名無しさん :04/02/22 21:06
MSDNの日本語化パッチを
シェアウェアにしていいですか?

794 名前:デフォルトの名無しさん :04/02/22 21:17
>>793
著作権の問題がありそう。

795 名前:デフォルトの名無しさん :04/02/22 21:21
例えば
C:\WINDOWS\デスクトップ\application.exe
とパスを入力するとapplication.exeが起動するようにするには
どうしたら良いでしょうか?

796 名前:デフォルトの名無しさん :04/02/22 21:32
VC++でダイアログにコンボボックスを配置してプログラムを組みました。
コンボボックスのアイテムはSendMessageを使って追加するようにしました。
いざ実行してみたのですが、コンボボックスの右の▼のところをクリックしても
下にリストは出てきません。
どういう風にすれば、リストを表示できるのか教えてください。
環境はVisual C++6.0です。お願いします。

797 名前:デフォルトの名無しさん :04/02/22 21:36
>>795
クリエイトプロセスAPIかウインエグゼックAPI


798 名前:デフォルトの名無しさん :04/02/22 21:40
>>796 ちゃんとリストに追加されているかデバッグして確認しなさい

799 名前:796 :04/02/22 21:42
>>798
追加はちゃんとされてます。
上下ボタンを押すことでアイテムを選べますので。

800 名前:デフォルトの名無しさん :04/02/22 21:49
>>796
ドロップダウンリストかな?
リソースエディタを使ってるなら、エディタで
コンボボックスの右側の▼を押すと、ドロップ
ダウンしたときのサイズが表示されるので、
このサイズを拡張すればいいはず。


801 名前:デフォルトの名無しさん :04/02/22 21:52
>>800
あのインターフェースよくないよ。
と言うか、ディフォルトで適当なサイズが表示されるようになっていれば、こういう質問も減ると思うのだが。

802 名前:796 :04/02/22 21:52
>>800
できました。
コントロール自体のサイズを大きくしなければならなかったんですね…。
VBから移行したのでそんな概念全くありませんでした。
ありがとうございました。

803 名前:デフォルトの名無しさん :04/02/22 21:57
>>801
それは同意。
初め、俺もかなり悩んだ。


804 名前:デフォルトの名無しさん :04/02/22 22:15
ダイアログエディタ上でコンボボックスの高さは変えられないんですか?
フォントに依存?

805 名前:デフォルトの名無しさん :04/02/22 22:19
>>804
普通に変えられるだろ?

フォントの差異によってサイズに影響が出るのはどのコントロールもおなじ

806 名前:795 :04/02/22 22:38
パスにc:\\windows\デスクトップ\test.txtを入力すると
C:\Windows\デスクトップ\Vc++\Filerun\main.cpp(31) : warning C4129:
          'テ' : エスケープ シーケンスとして正しく認識されませんでした。
と出るんですがこれはどういう意味でしょうか?

807 名前:デフォルトの名無しさん :04/02/22 22:39
\が1つ足りん

808 名前:デフォルトの名無しさん :04/02/22 22:41
>>806
Cの基礎
「エスケープ文字」について調べてみよう

809 名前:795 :04/02/22 22:43
>>807
出来ました。ありがとうございます
>>797
すいません。お礼を言うのを忘れてました。
ありがとうございます。

810 名前:795 :04/02/22 23:11
CreateProcess(NULL,"notepad.exe c:\\windows\\デスクトップ\\test.txt",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
こう記述するとc:\\windows\\デスクトップ\\上のtest.txtがnotepad.exeで起動するわけですが
普通の実行ファイルだった場合(例えばsleipnir.exe等)はどうすればよいですか?


811 名前:デフォルトの名無しさん :04/02/22 23:14
>>810
ん? そこまで分かってってなんでワカランの?

CreateProcess(NULL,"sleipnir.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);

812 名前:デフォルトの名無しさん :04/02/22 23:14
フルパスで指定汁

813 名前:デフォルトの名無しさん :04/02/22 23:21
>>810
起動するだけならこちらの方が分かりやすいだろう

CString AppStr = _T("C:\\Program Files\\Internet Explorer\\iexplore.exe"); //パス
CString OptionStr = _T(""); //起動オプション文字列
ShellExecute(m_hWnd, _T("open"), AppStr, OptionStr, NULL, SW_SHOW);

ShellExecuteは実行ファイルパス以外なら関連づけを元に設定されている
実行ファイルでそのファイルを開く。URL(http://)ならブラウザとか。

814 名前:デフォルトの名無しさん :04/02/22 23:27
便乗質問すいません。
_T って無いとまずいんですか

815 名前:デフォルトの名無しさん :04/02/22 23:30
_Tはウニコード以外だとプリプロセッサにあぼーんされる。
Shift_JISだとイラン


816 名前:795 :04/02/22 23:31
>>813
すいません。MFCはあまり使い方等が分からないもので…。
>>812
フルパスってことは
CreateProcess(NULL,"c:\\windows/デスクトップ/sleipnir.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)
と指定しろってことですか?実行しても無反応だったのですが・・・

817 名前:デフォルトの名無しさん :04/02/22 23:33
釣り?

818 名前:デフォルトの名無しさん :04/02/22 23:33
>>816
CreateProcessの戻り値くらい見ろよー。

"c:\\windows\\デスクトップ\\sleipnir.exe"

819 名前:795 :04/02/22 23:41
>>818
はぁ〜出来ました。お騒がせしました。
すいません最後に…ショートカットはどうすれば良いでしょうか?
"c:\\windows\\デスクトップ\\sleipnir.lnk"では無理ですた

820 名前:デフォルトの名無しさん :04/02/22 23:43
>>819
ShellExecute だと動くんでねーのか?
やったことは無いけど。


821 名前:デフォルトの名無しさん :04/02/22 23:44
>>819 どぞー
http://www.google.co.jp/search?q=vc+%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%80%80%E3%83%AA%E3%83%B3%E3%82%AF%E5%85%88%E3%80%80%E5%8F%96%E5%BE%97&ie=UTF-8&oe=UTF-8&hl=ja&lr=

822 名前:デフォルトの名無しさん :04/02/22 23:44
>>814
_Tマクロは文字コードの互換性をもたせるために付けておくもの
コンパイルされたときに適切なコードの方にしてくれる
もし将来ユニコードでコンパイルし直す必要が出たとしても
コードの書き直しをする必要がなくなる

Tの付く文字列も同じ

TCHAR < CHAR
LPTSTR < LPSTR

823 名前:デフォルトの名無しさん :04/02/22 23:46
だからCreateProcessなんてややこしいもの使わずにShellExecute使えよ
必要ないんだろ?

824 名前:795 :04/02/22 23:48
>>820、822、823
アドバイスありがとうございました。
本当にお世話になりました。

825 名前:795 :04/02/22 23:48
822→821ですた

826 名前:デフォルトの名無しさん :04/02/22 23:53
>>795 のコードだと CreateProcess がメモリーリークしていそうな予感。


827 名前:デフォルトの名無しさん :04/02/23 00:03
>>822
_Tマクロを律儀に使ってるヤシって居るのか?


828 名前:デフォルトの名無しさん :04/02/23 00:16
うにこーど 使うことないしなー どんなときに使うのよ

829 名前:デフォルトの名無しさん :04/02/23 00:30
プロのPGで_Tマクロを使わない奴は、明らかに低レベルPGだろ。

830 名前:デフォルトの名無しさん :04/02/23 01:09
んなぁこたぁない。

831 名前:デフォルトの名無しさん :04/02/23 01:15
そもそも_Tを使う場面のほうが限られすぎてるな

832 名前:デフォルトの名無しさん :04/02/23 01:33
>>828
そういうキミこそ使うべき。そう思っていて適当にやっていると、ある時既存のコードを
ユニコードでコンパイルし直す必要が出て困ることになる。プロジェクト自体は使わない
としても、部分コードを使い回すこともあるだろうし、全体にきれいなコードを書くクセ
をつけておいた方がベターだと思うよ。

別にそれがあったからって問題になるわけじゃなし、文字列に_T付けるだけなんだから
クセにして統一しておく。

833 名前:デフォルトの名無しさん :04/02/23 01:45
>ある時既存のコードをユニコードでコンパイルし直す必要が出て困ることになる

そんなこと絶対にない。
むしろVCやWindowsの中途半端なunicode対応による弊害の方がずっと大きくなる。
unicode対応が必要なら専用の処理をきっちり書き上げるべき。
〜W関数を使うかどうか程度の差しかないんだから。

834 名前:デフォルトの名無しさん :04/02/23 06:15
「絶対にない」 と言い切ってるところがすごいな…
将来が見えるのか…

> 〜W関数を使うかどうか程度の差しかないんだから
UNICODE, _UNICODE 定義すれば、
勝手に 〜A 〜W を変えてくれるんだけどなぁ…


ライブラリなんかは、将来どうなるかわからんのだから
特に _T( ) で囲っておいたほうが良いだろうな。


835 名前:デフォルトの名無しさん :04/02/23 06:46
そもそも_T()しておいてコンパイルターゲット変えただけのアプリに意味があるとは思えないけど
実際どうなんだろう

836 名前:デフォルトの名無しさん :04/02/23 08:00
>>835
意味があるから使ってんだよ

837 名前:デフォルトの名無しさん :04/02/23 08:03
最近は95/98系非サポートでもいいのが増えてきたから
UNICODEビルドを多用してるな。

838 名前:デフォルトの名無しさん :04/02/23 10:14

Unicode <-> Shift-JIS の変換APIってあるんだっけ?
内部でUnicodeで処理しても、出力はShift-JISにしたい
ってことはわりとあると思うんだが。



839 名前:デフォルトの名無しさん :04/02/23 10:51
>>838
あるか?

840 名前:デフォルトの名無しさん :04/02/23 11:08
あるよ

841 名前:840 :04/02/23 11:11
あるっつったのはAPIの方ね
WideCharToMultiByte() と MultiByteToWideChar()

842 名前:デフォルトの名無しさん :04/02/23 12:36
main関数とclassの宣言・定義を別のファイルに分けて書きたいととき、
ヘッダファイルの中身&各ファイルのプリプロセッサ制御文はどうすればいいのでしょう?
誰か教えて

843 名前:デフォルトの名無しさん :04/02/23 13:02
>>842
好きにすればいいと思うけど

844 名前:デフォルトの名無しさん :04/02/23 13:57
vbとvcの違いを教えてくれ

845 名前:デフォルトの名無しさん :04/02/23 13:58
>>844

vcってなんですか?

846 名前:デフォルトの名無しさん :04/02/23 14:03
>>844
文字コード

847 名前:デフォルトの名無しさん :04/02/23 15:04
現在ニューヨーク在住で、
IT関連で職を探しています。
面接の時、マイクロソフトの
純粋なプログラミングでアプリケーション
作ったことありますか? と、聞かれ…
はい、MFCを使ってと答えたら怒られました。
どういうことですか?

848 名前:デフォルトの名無しさん :04/02/23 15:09
int データを char に変換して出力したいのですが、どう書いたらいいでしょうか?

849 名前:デフォルトの名無しさん :04/02/23 15:10
「API直書きでWindowsアプリを書いたことがあるか」
という意味だったと思われ。

850 名前:デフォルトの名無しさん :04/02/23 15:43
int i;
(char)i;

851 名前:デフォルトの名無しさん :04/02/23 15:49
>>847
その質問はした香具師もよく分かってなさそうだな
やめて正解では?

852 名前:通行人A :04/02/23 16:02
>>847,849
pure=混ざりもの無し=ライブラリ無し=WIN32API only ってことですかな。
ふーむ。

853 名前:デフォルトの名無しさん :04/02/23 16:15
MFCも純粋なMS製ライブラリだけどな。
「MSの純粋なプログラミング」なんて初めて聞く表現だ。

854 名前:デフォルトの名無しさん :04/02/23 16:34
>>847
つっこんで欲しかったんじゃないの?





・・・んなこたーない

855 名前:デフォルトの名無しさん :04/02/23 16:48
>>854
そうだと思うよ。

856 名前:デフォルトの名無しさん :04/02/23 16:57
顧客からの要求で不明瞭な表現があった場合、確認できるかどうか

を問う面接だった可能性も無いことも無いけど
そうなるともうこのスレというか板の範疇では無いね。

857 名前:デフォルトの名無しさん :04/02/23 17:19
VC++ .NET 2003について教えてください。
例えば、FormのWndProcをオーバーライドする場合、Form1.hとかに
直接void WndProc… とか書かないといけないのでしょうか?
デザイナとかから簡単にはできないのでしょうか?

あと、VC++6でいうところのClassWizardみたいなのはないのでしょうか?
メッセージのやりとりとかすごく不便…



858 名前:デフォルトの名無しさん :04/02/23 17:35
カーソルの状態変化をリアルタイムに取得→描画するソースを
作ったのですが同じカーソル画像(Arrow)しか描画できませんでした
VC++.NETのSDKです

hCurNow = GetCursor();
bRet = GetIconInfo(hCurNow, &iconInfo);
//略 ここで座標をちょこちょこいじった
if (iconinfo.hbmMask) DeleteObject(iconinfo.hbmMask);
if (iconinfo.hbmColor) DeleteObject(iconinfo.hbmColor);

DrawIcon(hdcMem, x, y, hCurNow);

上記ロジックをぐるぐる回して描画してるのですが、
「I」な表示とか「+」な表示が出てこないのです

どなたかヒントを授けてくださいませんかm(_ _)m

859 名前:デフォルトの名無しさん :04/02/23 20:25
>>836-837
意味があるって、だったらUNICODEビルドだけでよくない?
まったく同じで使用APIが変わるだけのアプリにどんな意味が?

860 名前:デフォルトの名無しさん :04/02/23 20:50
Unicode対応については各自AdvancedWindowsでも読んで納得しておけ。
絶対にUnicodeが必要ない奴は使わなくてもいいんだからそう熱くなるな。

861 名前:デフォルトの名無しさん :04/02/23 21:03
Debug実行すると
'C:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません
という感じの情報がたくさん出てTRACEの出力が見にくいです。
デバッグ情報を見やすくするよい解決方法はないでしょうか?

862 名前:デフォルトの名無しさん :04/02/23 21:09
かなり環境依存の話になってしまいますが、解る方がいたら教えて下さい。
VC5.0においてDLLをデバッグするとき、プロジェクトの設定において
「追加するDLL」に特に指定しなくともシンボル情報を読み込むDLLと読み込まない
DLLがあります。シンボルがなければブレークポイントが設定できないので、ヘルプ
の記述通りにすべてのDLLを明示してシンボルを読み込むようにしてやると、今度は
ブレークポイントが無視されてしまいます。これではまともにデバッグできません。

しかも、解らないのは、デスクトップとノート、二つの機体にVCをインストールして
開発を行っていますが、デスクトップの方は特に明示せずともすべてのDLLのシンボル
情報を読み込み、デバッグ作業に問題はありません。ですが、同じプログラムを
中間ファイルを含めてノートにコピーしてデバッグを行おうとしても、最初に必ず
一度「全てのファイルを開くことはできません」との警告が発生し、他の作業は
問題なく行えるのですが、シンボルは読み込んでくれないのです。リビルドを
何度か繰り返してみてもダメでした。

わかりにくい説明で申し訳ないのですが、どなたか助けてください。

863 名前:デフォルトの名無しさん :04/02/23 21:15
>>861
シンボルファイルをインストールする

詳細はヘルプから「システム デバッグ シンボルのインストール」を参照

864 名前:デフォルトの名無しさん :04/02/23 21:17
>>862
同じディレクトリにpdbファイル置いてもだめなの?

865 名前:デフォルトの名無しさん :04/02/23 21:18
>>857
その辺のほとんどの部分はプロパティウィンドウに
移った模様。プロパティを隅々まで見れ

866 名前:861 :04/02/23 21:56
>>863
ありがd。
インスコしてみます。
ttp://www.microsoft.com/whdc/ddk/debugging/symbols.mspx


867 名前:861 :04/02/23 23:09
>>863
インストールしてみましたb
'C:\WINNT\system32\NTDLL.DLL' を読み込みました。シンボルが読み込まれました。
に、変わりました。
これが邪魔でTRACE等のデバッグ情報が見にくいです。
こいつをフィルタして表示しないようにしたいです。
もう少しキーワードプリーズ。

868 名前:デフォルトの名無しさん :04/02/24 00:51
これもかよ・・右クリックでいちいち消しては

869 名前:デフォルトの名無しさん :04/02/24 15:24
>>865
ありがとです
そうおもってプロパティウィンドウとクラスビューもチェックしたんだけど
オーバーライドとメッセージのところに何も表示されないのはなんでなんだろう…
ただの1行も表示されたことない
何か表示される/されないの条件があるんでしょうか?



870 名前:デフォルトの名無しさん :04/02/24 15:26
プロパティウィンドウの上にボタンがあって、
プロパティ・オーバーライド・イベント
が切り替えられなかったっけか?

871 名前:870 :04/02/24 15:29
ゴメン。
アホだ。
それはもう表示できてたのね・・・。
それでも見れないのか・・・。
ちゃんとクラスを(あるいはフォームエディタでフォームを)選択してから表示してる。

872 名前:デフォルトの名無しさん :04/02/24 15:56
>>870,871
ありがとです。
書き忘れてたのですがFrameworkを使ってます。
プロパティやイベントはちゃんと追加・変更できます。
クラスビューやオブジェクトブラウザでForm1とかを選択すると
プロパティのところにオーバーライドやメッセージのボタンがでます。
これを押して表示される画面が常に真っ白なのです。
もしかしてFrameworkではオーバーライドとかは手動で追加・削除が
基本でしょうか?(MFCではちゃんと表示されました)


873 名前:デフォルトの名無しさん :04/02/24 16:52
プロファイル、ってデバッグとリリースのどちらで行うべきでしょうか?
インクリメンタルリンク時に、プロファイルが出来ないのは何故でしょうか?

874 名前:デフォルトの名無しさん :04/02/24 20:42
ボタンにビットマップとテキスト両方表示させたいのですが、うまくいきません。
アドバイスお願いします。

875 名前:デフォルトの名無しさん :04/02/24 20:53
>>874
テキストをビットマップでのせたらダメなんか?

876 名前:デフォルトの名無しさん :04/02/24 21:42
>>874
メモリDCにビットマップを展開してその上からDrawTextとかで文字書いて
それをボタン上に表示させる。

877 名前:デフォルトの名無しさん :04/02/25 01:30
今度から >>1 に 「うまくいきません」は放置っていうの付け加えませんか?

878 名前:いずみんせんせぇ :04/02/25 01:58
こんばんはぁ。VC.NETで常駐プログラムを作ったのですが
シャットダウン時にアプリケーションを終了するプログレスバーのウィンドウが
表示されてしまいます。シャットダウン時にウィンドウを表示させない方法教えて下さい〜
OSは2000です。

879 名前:デフォルトの名無しさん :04/02/25 02:11
WM_QUERYENDSESSIONとかそんなの

880 名前:デフォルトの名無しさん :04/02/25 02:13
もしかしてWindow作ってないとか?
見えないウィンドウでメッセージ受けられるようにして
WM_QUERYENDSESSION や、WM_ENDSESSION 、WM_QUITなどに
反応すればいいと思う

881 名前:いずみんせんせぇ :04/02/25 02:17
880
そぉなんですぅ。
ウィンドウ非表示なんです。

882 名前:いずみんせんせぇ :04/02/25 02:19
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

switch (message)
{
case WM_CREATE:
OnCreate(hWnd, (LPCREATESTRUCT)lParam);
break;
case WM_TIMER:
OnTimer(hWnd, wParam);
break;
case WM_DESTROY:
OnDestroy(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

883 名前:デフォルトの名無しさん :04/02/25 02:38
>>881 表示非表示無関係

884 名前:デフォルトの名無しさん :04/02/25 09:59
うまくいきません

885 名前:デフォルトの名無しさん :04/02/25 12:18
>>884 人生がですか?

886 名前:デフォルトの名無しさん :04/02/25 15:57
カメラからイメージをキャプチャして表示するプログラムを作りたいのですが、
まったくわかりません。
よいサンプルはないでしょうか?

887 名前:デフォルトの名無しさん :04/02/25 16:38
>>886
CCamera camera->Caputer( "富士山" );
CFile file << camera;

888 名前:デフォルトの名無しさん :04/02/25 16:41
>>887
気持ちはわかるが
Caputerってなんだよ
せっかくネタ入れるならスペルくらいチェックしろよ

889 名前:デフォルトの名無しさん :04/02/25 16:49
>>886
DirectX9 SDKのDirectShowのサンプルが一番楽。

890 名前:デフォルトの名無しさん :04/02/25 17:22
>>889
サンプル見ました。
一番簡単そうなのが、PlayCapっいうのなんですが、
コンパイルが通りません。
strmbasd.libが開けないと言われます。

891 名前:デフォルトの名無しさん :04/02/25 17:31
strmbasd.libが開けない問題は解決できたのですが、
エラーが増えました。
外部シンボル何たらは未解決です、といわれます。
どうしたらいいでしょう?

892 名前:デフォルトの名無しさん :04/02/25 18:37
他のウィンドウを操作したいので、FindWindow("クラス名", NULL);でハンドルを取得しました。
しかし、目的のプログラムが起動してないときは戻り値がNULLとなると思うんですが、
そこがうまくいきません。
HWND hHandle
hHandle = NULL;
hHandle = FindWindow("#32770", NULL);
if(hHandle == NULL)
DestroyWindow(hWnd); //hWndはプログラム自身です。
else
SetWindowText(hHandle, "jacked!");
break;

こういう風に書いたのですが、どこがおかしいのでしょうか。
知恵を貸してください。
環境はVC6です。お願いします。

893 名前:バズー :04/02/25 18:40
Caputerはほんとうにあるんだ!

894 名前:デフォルトの名無しさん :04/02/25 18:41
>>892
#32770がいくつあると思ってんだ
Spy++で観察することをお勧めします

895 名前:892 :04/02/25 18:46
>>894
なるほど…。常駐ソフトのタイトルがjacked!になってました…。
このようなプログラムのハンドルを取得したいときはどうすればいいのでしょうか。
ウィンドウタイトルは不定なのでFindWindow以外に何か使えばいいのでしょうか?

896 名前:デフォルトの名無しさん :04/02/25 18:58
>>895
ちょっと複雑になるが、普通のWindowを不可視状態で作り
それとやり取りするというのを昔やったことがある。

897 名前:デフォルトの名無しさん :04/02/25 19:02
>>895
具体的に対象は何であるか(不定でない要素が何か)を書くと良いかも

898 名前:デフォルトの名無しさん :04/02/25 19:02
あとは、、不可視のコントロール貼り付けて
#32770の子ウィンドウを順番にEnumWindowsして
貼り付けたコントロールのタイトルを探すとか

899 名前:デフォルトの名無しさん :04/02/25 20:48
はじめまして.
CreateWindowで作成したエディットコントロールの文字カーソル(「|」こんな)の位置を取得したいのですが,
どうすればよいのでしょうか? 教えてください.

900 名前:デフォルトの名無しさん :04/02/25 21:15
GetCaretPos()かな、使ったこと無いけど

901 名前:899 :04/02/25 21:29
ありがとうございます.うまくいきました.
POINT構造体で結果が返ってきますが,X,Y座標はそれぞれフォントの幅と高さで割ることで
列と行が取得できました.

902 名前:デフォルトの名無しさん :04/02/25 21:36
>>901
スクロールやプロポーショナルフォントのときはどうする気だ。

903 名前:デフォルトの名無しさん :04/02/25 21:46
MFCなら
DWORD CEdit::GetSel()
を使うんだが・・・

904 名前:デフォルトの名無しさん :04/02/25 22:19
EM_GETSEL

SendMessage(
(HWND) hWnd, // handle to destination window
EM_GETSEL, // message to send
(WPARAM) wParam, // starting position (LPDWORD)
(LPARAM) lParam // ending position (LPDWORD)
);

MFCじゃないときはコレ使うのかな?

905 名前:デフォルトの名無しさん :04/02/25 23:31

いままで VC++6.0使ってて、
ついに VS.NET 2003 を買ったんだけど、
今回のMSDNって英語ドキュメントでまとめられている
部分ないのかな? なんか英語と日本語が混在してて
情報も重複しているみたいで分かりづらいんだけど。



906 名前:デフォルトの名無しさん :04/02/25 23:44
いままでもそうだったと思うが

907 名前:デフォルトの名無しさん :04/02/25 23:59
>>906
VC++6.0のときは
プラットフォームSDK

Platform SDK
で完全に分かれていたと思うんだけど。

新しいのは例えば

MSDNライブラリ > グラフィックおよびマルチメディア
 > グラフィックおよびマルチメディア

MSDNライブラリ > グラフィックおよびマルチメディア
 > Graphics and Multimedia (英語)

と深い階層で別れている。しかも「VC++ドキュメント」で
フィルタをかけると、英語の方が消えてしまう。
日本語の方は全部翻訳されていないのだから、
英語ドキュメントも含めてくれないと困るのだが。



908 名前:デフォルトの名無しさん :04/02/26 00:08
>>907
"DevLang" = "C" OR "DevLang" = "C++" OR "Product" = "VC" OR "DocSet" = "PSDK" OR "DocSet" = "NETFramework" OR ("DocSet" = "kbmsdn" AND "ProductVers" = "kbVC700") AND ("Locale"="kbJapanese" OR "Locale" = "kbEnglish")

Visual C++フィルタを変更して、英語も含めたら
英語ドキュメントも表示されるようになりますた。



909 名前:デフォルトの名無しさん :04/02/26 06:37
エディットボックスにテキスト入力してそれを
txtで保存したいんですけど、参考になるサイトありませんか?
おねがいします。
あと、ダイアログベースで作っています

910 名前:デフォルトの名無しさん :04/02/26 06:48
アプリケーションウィザードでSDIまたはMDIを選択。
ビューの種類にCEditViewを選択。
OKをクリック。
完成。

ダイアログベース?知らん。

911 名前:デフォルトの名無しさん :04/02/26 07:37
80bit/64bitの演算精度の切り替えってできますか?
あと丸めモードの切り替えはできるのでしょうか?
VC熟練者の方おねがいします.

912 名前:デフォルトの名無しさん :04/02/26 08:08
>>909
GetWindowText
fprintf

913 名前:デフォルトの名無しさん :04/02/26 08:36
>>909
GetDlgItemText
でテキストを取得した後
fputsでも使って書き出しとけ

914 名前:デフォルトの名無しさん :04/02/26 10:14
>>911
CPU,コンパイラ次第じゃないの?
あと、それを汲み取ってくれるOS
なんでシラネ

915 名前:デフォルトの名無しさん :04/02/26 11:46
>>858です
このマウスポインタの、カーソル変動について
どなたかヒントだけでも下さいませんか(ノT.Tノ

916 名前:デフォルトの名無しさん :04/02/26 11:59
DrawIcon(hdcMem, x, y, hCurNow);

なんでこんなことしてんの?
しかも、カーソルのイメージ削除してるし

917 名前:デフォルトの名無しさん :04/02/26 13:45
>>911
>80bit/64bitの演算精度の切り替え
Microsoft ランタイム ライブラリは数値演算コプロセッサ (またはエミュレータ) の
デフォルトの内部精度を 64 ビットに設定します。プログラムを LIB/FP10.OBJ と
リンクすることでこのデフォルトをオーバーライドし、チップ (またはエミュレータ) の
精度を 80 ビットに戻すことができます。FP10.OBJ は、リンカのコマンドラインで
LIBC.LIB、LIBCMT.LIB、および MSVCRT.LIB より前に指定する必要があります。

>丸めモードの切り替え
_control87 / _controlfp

918 名前:デフォルトの名無しさん :04/02/26 14:04
char文字列をstringへ変換したくて
string str = pChar;
のようにしたところ、charが16文字以上の場合、
失敗してしまうようで困っています。
(VS.net 2002を使っています。)
どのように変換すればよいのでしょうか?

919 名前:デフォルトの名無しさん :04/02/26 14:22
>>918

string str(pChar);

920 名前:デフォルトの名無しさん :04/02/26 14:43
すみません、ちょっと教えて下さい。

VC++で簡易データベースソフト、入力した各項目データを
ファイルにセーブしたり出来る、追加修正削除も可能なソフトを
作ろうと思っています。

何処か参考になる様なページ、サンプルソースは有りませんでしょうか?

921 名前:918 :04/02/26 14:51
>>919
その方法でも16文字以上は無理なんです・・。

922 名前:デフォルトの名無しさん :04/02/26 15:05
こんなことを聞いてよいものか、ちょっと申し訳ないようなことなんですが、
ダイアログのリソース作る時に使う、
ボタンとかエディットボックスなどの基本的なコントロールが入った
ウィンドウが、なにやら知らないうちに消えてしまいました。
どこを見ても表示/非表示設定などが無いっぽいのですが、
どうしたら表示できるかご存知の方がおられましたら教えてください。
visualc++ 6.0を使っています。。よろしくお願いします。

923 名前:デフォルトの名無しさん :04/02/26 15:22
>>921
ほんとかよ? 
ちゃんとヌルターミネートしてる?

924 名前:デフォルトの名無しさん :04/02/26 15:26
>>922
ダイアログ編集画面を表示した状態で
ツールバーのあたりを右クリックして
[コントロール]にチェックを入れる。

925 名前:922 :04/02/26 15:28
すいません、何も無い所で右クリしたら出てきました。

926 名前:922 :04/02/26 15:33
>>924
入れ違いだったみたいですいません。
ありがとうございました。解決できました。

927 名前:918 :04/02/26 16:28
>>923
してます。

string st;
char c[17];
for(int i = 0; i <16; i++)
{
c[i] = 'a';
}
c[16] = 0;
st = c;

↑このようなコードでstに値が入らないんです。

928 名前:デフォルトの名無しさん :04/02/26 16:58
include文とかも含めてテストプログラム全体をアップしてみろ

ちなみにstの中身はどうやって確認した?

929 名前:デフォルトの名無しさん :04/02/26 18:13
printf( "%s\n", st );
ってやってないか?

printf( "%s\n", st.c_str() );
だぞ

930 名前:デフォルトの名無しさん :04/02/26 18:22
>>929がクリティカルヒットの予感

931 名前:918 :04/02/26 19:08
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
string st;
int num = 16;
char c[17];
for(int i = 0; i<num; i++)
{
c[i] = 'a';
}
c[num] = 0;
st = c;

return 0 ;
}

です。
確認は、returnの直前にブレークポイントを入れて
自動変数を見ています。

932 名前:デフォルトの名無しさん :04/02/26 19:12
printf( "%s\n", st.c_str() );
で出力してみれ

933 名前:デフォルトの名無しさん :04/02/26 19:23
つーかcが17に固定なのにnumを変更する意味があるのか。

934 名前:デフォルトの名無しさん :04/02/26 20:07
char c[17];の次の行に、
char d[1000];を入れたら動きまつか?

935 名前:918 :04/02/26 20:11
>>932
あれ、確かにできてますね・・。
デバッガでは、単に文字量の違いから表示が変わっていただけみたいです。

バグを探していて、その原因がstringの代入ミスだと思っていた
のですが、おかげさまでそうではないことが分かりました。
ありがとうございました。


936 名前:デフォルトの名無しさん :04/02/26 20:21
釣りだったんじゃないだろうな・・w

937 名前:デフォルトの名無しさん :04/02/26 20:27
まあ、初心者は結構あのウォッチ画面にはまるんじゃないだろうか。
どうしても出力したくなきゃ、メモリの方で文字列バッファの先頭アドレスぶちんこんで直接見た方が良いんだよ。

938 名前:デフォルトの名無しさん :04/02/26 22:38
MFCでアイコンをプッシュボタンに表示したいのですが、アイコンが縮小?されて表示されてしまいます。
(アイコンファイルをプレビューで見たサイズより小さく表示される)
拡大して表示する方法はあるのでしょうか?


939 名前:デフォルトの名無しさん :04/02/26 23:29
>>938
ビットマップにすると良い
それで初期化でこんな感じにする

m_Bitmap.LoadBitmap(IDB_BITMAP1);
((CButton*)GetDlgItem(IDC_BUTTON1))->SetBitmap(HBITMAP(m_Bitmap));


940 名前:デフォルトの名無しさん :04/02/27 03:20
最近VS.NETを入手していじってみたんだけど、フォームのコンポーネントの
外観がかっこわるい。Win3.1から変わってないような感じ。
最近のWinXPとか、MacOSXみたいなカコイーコンポーネント無いですか?
できれば無料で。


941 名前:デフォルトの名無しさん :04/02/27 03:41
WinXP は、かっこえぇのかッ……!?

942 名前:デフォルトの名無しさん :04/02/27 03:58
VS.NETがコントロールの外観を決めていると勘違いしているアフォを発見!

943 名前:909 :04/02/27 07:00
おくれてすいません。
ありがとうございます、今からやってみます

944 名前:デフォルトの名無しさん :04/02/27 08:29
>>940
OSは何をお使いで?

945 名前:デフォルトの名無しさん :04/02/27 19:14
割れとか言う答えをしそう

946 名前:デフォルトの名無しさん :04/02/27 22:36
我、OS選ばず

947 名前:デフォルトの名無しさん :04/02/27 22:59
♂を選ばず。 = 「やらないか?」


_| ̄|○ ォェ…

948 名前:貧乏紙 :04/02/27 23:49
VC++5スタジオ使ってますが、ヘッダーファイルに変数とか配列をいっぱい
宣言するとコンパイルエラーにはならないが、起動しても瞬間に終了してしまいますが
これは、正規版を買えということでしょうか?

949 名前:デフォルトの名無しさん :04/02/27 23:54
VC++5スタジオ???????

950 名前:デフォルトの名無しさん :04/02/27 23:54
( ゚Д゚)ハァ?

951 名前:デフォルトの名無しさん :04/02/27 23:58
>>948
どういうバージョンにしろそういう制限はないよ

952 名前:デフォルトの名無しさん :04/02/28 00:12
>>948
わけわからん。

953 名前:デフォルトの名無しさん :04/02/28 01:23
正規版じゃないとウィルスしか作れません

954 名前:デフォルトの名無しさん :04/02/28 01:53
>>953
それはある意味スゴイ

955 名前:デフォルトの名無しさん :04/02/28 08:26
朝暇だから、携帯からC++勉強できるとこってない?


956 名前:デフォルトの名無しさん :04/02/28 08:28
>>955
そんなサイトがあるのかどうかは知らないが、
....本でも読んでりゃ良いじゃねーか

957 名前:デフォルトの名無しさん :04/02/28 08:45
本で勉強するという感覚のないのが最近ちょっと多いね

958 名前:955 :04/02/28 08:59
電車だから、今日みたいな休日は空いてるから本でもいいんだけど、
平日は満員で本なんか読めないんだよ。

959 名前:デフォルトの名無しさん :04/02/28 10:06
>>958
PDA使えば?

960 名前:デフォルトの名無しさん :04/02/28 11:08
>>958
そんな満員の状態だと携帯も見れんと思うが?

961 名前:デフォルトの名無しさん :04/02/28 11:33
好きなサイト、コピペして
携帯にメールでも送っとけ

962 名前:958 :04/02/28 12:41
>>959
何それ。

>>960
C++の本はでかいだろ。

>>961
今度猫のやつをコピーしてみる。

963 名前:デフォルトの名無しさん :04/02/28 12:54
なんとなく >>958 の人物像を想定できる俺はスーパーハカー

964 名前:デフォルトの名無しさん :04/02/28 13:39
>>962
釣り?
一応マジレスしておくと、NotePCと携帯電話の中間程度の大きさと使い勝手の情報端末。
ここでも見れば見当つくだろ。
http://pc3.2ch.net/test/read.cgi/mobile/1077028872/

965 名前:958 :04/02/28 14:06
>>962
高い。
やっぱPCからメールで送るのが一番良さそうだな。

966 名前:デフォルトの名無しさん :04/02/28 14:52
>>962
>C++の本はでかいだろ。
お前には俺の言わんとすることが理解出来んようだな。
屑だな。

967 名前:デフォルトの名無しさん :04/02/28 14:55
>>955
印刷しとけ
紙1枚ぐらいなら邪魔にならないし紛失しても問題ないだろ

968 名前:デフォルトの名無しさん :04/02/28 15:06
Visual C++って、どこがvisualなんですか?


969 名前:デフォルトの名無しさん :04/02/28 15:08
Windowが

970 名前:デフォルトの名無しさん :04/02/28 15:17
>>968
できあがったものがvisualっぽい

971 名前:958 :04/02/28 15:39
>>966
お前が屑。

>>967
それだ。
紙なら折ったりできるしな。

972 名前:デフォルトの名無しさん :04/02/28 15:50
なんかすげー頭悪そう

973 名前:デフォルトの名無しさん :04/02/28 16:33
958は莫迦。
そういう性格じゃプログラムなんか止めとけ。
工房か?

974 名前:デフォルトの名無しさん :04/02/28 16:45
>>971
>966は密着状態で携帯電話を使用するなと言いたいわけだ。
そんなことも判らないお前はプログラマにはなれても上流工程には一生近づけないよ。

975 名前:デフォルトの名無しさん :04/02/28 16:58
さて、頭の悪い人はほっといてそろそろ新スレですね

976 名前:デフォルトの名無しさん :04/02/28 17:16
おれのは

  !?

でかいぜよ?

977 名前:デフォルトの名無しさん :04/02/28 19:49
次スレ

http://pc2.2ch.net/test/read.cgi/tech/1077965179/

978 名前:デフォルトの名無しさん :04/02/29 01:18
case WM_PAINT:
{
HDC hDC;
PAINTSTRUCT ps;
LPCSTR str = "test";
hDC = BeginPaint(hWnd, &ps);
SetTextColor(hDC, RGB( 0, 0, 255));
SetBkMode(hDC, TRANSPARENT);
TextOut(hDC, 100,100, str, lstrlen(str));
EndPaint(hWnd, &ps);
}
return 0L;

↑はウィンドウプロシジャ内のメッセージのケース文なんですが、
この「中カッコ」を外すとコンパイルできないのはなぜですか?
「strの初期化がcaseラベルによって行われませんでした」
というエラーがでて、次のcase文のところで引っかかってるみたいです。。。

979 名前:デフォルトの名無しさん :04/02/29 01:27
>>978
caseラベルの中で変数の宣言はできまへん。
switchをC++で使うときのマンドクサイところ。

980 名前:デフォルトの名無しさん :04/02/29 01:41
本当は出来ないけど中カッコでcase内全部囲っとけばできるってことなんですかね。
謎な仕様ですね。。。

助かりました。ありがとうございます。

981 名前:デフォルトの名無しさん :04/02/29 01:45
>>980
{ } で囲むと、変数の生存範囲が
{ } の中に限られるので、大丈夫なんでしょう。
こういうスタイルが適切かどうかは分からない。
普段はMFC使ってるから。

982 名前:デフォルトの名無しさん :04/02/29 01:57
VC.Net だとこんなコードも通ってしまう分けなんだが。。。

switch (int a = 1)
{
case 1:
  int b = 2;
}

983 名前:978 :04/02/29 01:58
なるほどそういうことですか。
そういうもんだと覚えとくことにします。
ありがとうございました。

984 名前:デフォルトの名無しさん :04/02/29 02:03
C++ の言語仕様だと変数の書ける所だと殆どの所で変数定義も出来るらしい。
そんな事を厨にやられた日にゃ。(ry


985 名前:デフォルトの名無しさん :04/02/29 02:08
>>983
次のようなコードだと n = 2 のときに
宣言無しで a が使われちゃうから
問題なんでしょう。

switch ( n )
{
case 1:
int a = 0;
cout << a;
case 2:
a++;
cout << a;
}



986 名前:デフォルトの名無しさん :04/02/29 02:13
>>985
error C2360: 'a' の初期化が 'case' ラベルによって行われませんでした。


987 名前:デフォルトの名無しさん :04/02/29 02:16
>978
ちゃんとエラーメッセージを読め。読みとれ。理解しようとしろ。
>「strの初期化がcaseラベルによって行われませんでした」

別のcaseラベルを通ったときでも、そこより下の位置なら、
strを参照することができてしまうが、初期化部分を通らないから初期化できない。

>982
その初期化式の下に一つでもcaseを作れば、直ちにエラーになる。


って、もう書かれたか。
ええぃ埋めついでに書き込んでやる。


■過去ログ置き場に戻る■ 1- 前250 最新50
DAT2HTML 0.33f Converted.