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


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

★初心者にVisual C++を教えるスレ★ Part12
751 名前:デフォルトの名無しさん :04/06/22 00:35
すまんよく見てなかった出力時に1回分減算してたんだな。


752 名前:デフォルトの名無しさん :04/06/22 00:39
>>746
和が3より小さい場合、でデバッガでコード追ってみ。

753 名前:デフォルトの名無しさん :04/06/22 00:41
>>747
スコープの外だったら、処理系関係なくコンパイルエラーだろが。

754 名前:デフォルトの名無しさん :04/06/22 00:53
ポイントはmが500を超えた後もnはインクリメントされてるとこだね。

755 名前:デフォルトの名無しさん :04/06/22 00:54
最後nがn++が実行されたあと、m<500が偽と評価されるんじゃない?


756 名前:デフォルトの名無しさん :04/06/22 00:57
for文の中でnとmを出力してみれ

757 名前:746 :04/06/22 00:59
>>756
そうすると正しい答えがでるんです。
なぜかfor文外で計算結果だけ出力すると間違った答えになって・・・

758 名前:デフォルトの名無しさん :04/06/22 01:00
いや、むしろfor文の最後の評価時にnが33になっているから、
for文の中に書いてもはまる

759 名前:デフォルトの名無しさん :04/06/22 01:02
forの仕組みを理解しよう
for( i = 0 i < 2; i++ )
iを0で初期化する (i=0)
iが2未満なので実行
iをインクリメントする(i=1)
iが2未満なので実行
iをインクリメントする(i=2)
iが2未満でないのでループを抜ける



760 名前:デフォルトの名無しさん :04/06/22 01:22
1)
if ( m > 500 ) break;
n = 31;
m = m + n; /* m = 496; */
n++; /* n = 32 */
2)
if ( m > 500 ) break;
n = 32;
m = m + n; /* m = 528 */
n++; /* n = 33 */
3)
if ( m > 500 ) break;

n - 1 = 33;
m - n = 495;

761 名前:デフォルトの名無しさん :04/06/22 01:24
最後のn-1は32な。

762 名前:デフォルトの名無しさん :04/06/22 01:35
if入れるだけでよかったっていう落ちか。
forじゃなくてwhileでやるべきところだったのか。

763 名前:デフォルトの名無しさん :04/06/22 02:44
forでよかろ?

int m=0;
for(int n=0;(m+n+1)<500;++n) m+=(n+1);


>1+2+3+・・・+nの和が500より小さい場合における、nとそのときの和
1+2+...+nの和が4より小さい場合,,,で考えてみほ
0+0+1<4 -> m=0+1,n=1
1+1+1<4 -> m=1+2,n=2
3+2+1<4 終了
-> m=3, n=2

764 名前:デフォルトの名無しさん :04/06/22 03:54
質問があって書き込みしました。 実は、
#include <stdio.h>
int main() {
int i;
char array[10];
cout << "array : " << array << '\n';
for(int i = 0; i < 10; i++)
cout << "&array" << [i] <<" : " << &array[i] << '\n';
return 0;
} char array[10];
printf("array : %d\n\n", array);
for(i = 0; i < 10; i++)
printf("&array[%d] : %d\n", i, &array[i]);
return 0;
} はc言語で、こっちなら、arrayのアドレスの出力することができるんですが、
C++言語で、 同じようなソースを書いたら、文字バケ?をするんです。
#include <iostream.h>
int main(){
char array[10];
cout << "array : " << array << '\n';
for(int i = 0; i < 10; i++)
cout << "&array" << [i] <<" : " << &array[i] << '\n';
return 0;
}
なんですが・・・型をintにすると、ちゃんとアドレスが出力されるんです。
でも、charに変えると、ダメになります。 なぜ、c言語では、普通に出力されるのに、C++ではダメなんでしょうか?
それとも、僕の書き方がおかしいのでしょうか?(多分、おかしいからでしょうが・・・)
どうかお願いします。

765 名前:デフォルトの名無しさん :04/06/22 04:35
>>764
char* が文字列として解釈されてる。
明示的に void* にキャストすれば思うような結果が得られるはず。
それとソースはちゃんと貼れな。

766 名前:デフォルトの名無しさん :04/06/22 04:36
>>764
iostream使わなければ正しく出力されると言うことなら、
iostreamでは余計なお世話をしてくださっていると言うことだろ。

767 名前:デフォルトの名無しさん :04/06/22 04:53
というか、>>764のソースがコンパイル出来ない…
[i]って何よ?


768 名前:デフォルトの名無しさん :04/06/22 05:20
>>746
スレ違い
ここはVisual C++スレ
それはC++

769 名前:デフォルトの名無しさん :04/06/22 16:10
宿題スレじゃないか

770 名前:デフォルトの名無しさん :04/06/22 17:10
すみません、質問させてください

同じ名前(たとえばA.cpp)のものを二つ作成(\Aフォルダ\A.cppと\Bフォルダ\A.cpp)してしまったのですが
ビルドしようとすると
「どちらも\debug\a.objを作成するために設定されているのでビルドできない」と警告がでるのですが
どうすれば解決できるのでしょうか?
単純にBフォルダを消してもダメですよね

771 名前:770 :04/06/22 17:16
すみません、環境はVC++6.0のprofessionalです

772 名前:デフォルトの名無しさん :04/06/22 17:30
プロジェクト-設定 でファイル選択して、出力ディレクトリを変更はどうか?
いじったことないからなんともいえんが

773 名前:770 :04/06/22 17:55
>>772
すばやい回答ありがとうございます
とりあえず応急手当ということで「ビルドしない」という項目にチェックいれときました

で出力ディレクトリを具体的に何に変更すればよいのでしょう?適当?
あと質問ばかりで悪いのですがこれ(A.cpp)自体をこのプロジェクトから消すのにはどういった手順を踏めばいいのでしょうか?
よろしくお願いいたいします

774 名前:デフォルトの名無しさん :04/06/22 18:38
プロジェクトワークスペースでA.cppをクリックして×ボタンをクリック

775 名前:770 :04/06/22 18:49
>>774
×ボタンは見つからなかったですけどDeleteキーで消すことが出来ました
本当にありがとうございました!

776 名前:デフォルトの名無しさん :04/06/23 00:00
>>746
自然数の和を求める公式は使わないのね
ループで回すより早いと思うが…

500くらいだったら実行速度に大した差は無いと思うけど
数がデカくなれば差が出てくるだろうに

まぁ、for文の動きを学ぶような演習なんだったら公式は使わないと思うが

777 名前:デフォルトの名無しさん :04/06/23 17:54
ダイアログ上のフォーカスをTABで移動していって、ボタンにフォーカスが来ると
点線と黒い影が出ると思うんですけど、
そこからSetFocusでフォーカスを別のとこに移動させると
点線だけ移動して、黒い影がボタンに残ったままになってしまいます。
この黒い影を強制的に消すにはどうしたらいいでしょう?

778 名前:デフォルトの名無しさん :04/06/23 18:43
PUSHBUTTON と DEFPUSHBUTTON の違いじゃねーの?

779 名前:778 :04/06/23 18:44
ごめん無視して

780 名前:デフォルトの名無しさん :04/06/23 18:50
Dialog上に配置されたピクチャーコントロールの座標(左上,右上,右下,左下)
を知るにはどのようにすれば良いでしょうか?


781 名前:デフォルトの名無しさん :04/06/23 18:58
CRect rect;
ピクチャーコントロール.GetWindowRect(rect);

782 名前:デフォルトの名無しさん :04/06/23 19:02
タダで使えるヴィジュアルじゃないけどVisualなVC++を手に入れようと思って
ttp://cazlog.cocolog-nifty.com/blog/2004/04/microsoft_visua.html
↑にしたがってやってみたんですが
>とゆっても、Toolkitのbinとincludeとlibに、それぞれパスを通してやるだけです。SetEnv.batの最初に次のような記述を追加します。
>
>Set MSVct=Toolkitをインストールしたディレクトリ
>Set Lib=%MSVct%\Lib;%Lib%
>Set Include=%MSVct%\Include;%Include%
>Set Path=%MSVct%\Bin;%MSVct%\Bin\Win64;%path%
が、どこに記述を追加すればいいのかわからないです・・・
とりあえずSetEnvをダブルクリックしてみると、プロンプト(?)ぽいのが開くけど一瞬で消えちゃいます。

どーすればいいんでしょ・・・?(´・ω・`)

783 名前:デフォルトの名無しさん :04/06/23 19:16
>>781
Dialogとの相対座標をできれば知りたいのです・・・

784 名前:デフォルトの名無しさん :04/06/23 19:16
Toolkitは専用のスレがあるし、それ以前にDOSプロンプトやbatファイルの書き方勉強しる。

785 名前:デフォルトの名無しさん :04/06/23 19:17
>>783
ScreenToClient(rect);

786 名前:デフォルトの名無しさん :04/06/23 20:20
>>784
AnyWayThxです。

んじゃ、どっかでマルチポストしてきます。

787 名前:デフォルトの名無しさん :04/06/23 21:32
>>777
NextDlgCtrlで。

788 名前:デフォルトの名無しさん :04/06/25 19:18
NET2003買ったんですけどIDEの使い方の解説とかしてるサイトないですか?
何がなにやらさっぱりなんですが。

789 名前:デフォルトの名無しさん :04/06/25 23:18
本買えよぼけ

790 名前:デフォルトの名無しさん :04/06/26 00:55
リストビューの項目をクリックしたときに通知されるメッセージってあります?
列のクリックは「LVN_COLUMNCLICK」なのですが、どうもこれは行には適用されないようで

791 名前:デフォルトの名無しさん :04/06/26 10:02
クラスのプライベートで、

class name{
private:
char *dogs[4] = {"Afghan Hound", "Beagle", "Border Collie", "Dalmation"};
};

のように文字列の配列を定義するにはどうすればいいんだろ。。。

792 名前:デフォルトの名無しさん :04/06/26 10:05
>>782
conio.h をインクルードして getch(); を加えれば動く筈。

793 名前:デフォルトの名無しさん :04/06/26 10:17
>>790
普通にWM_LBUTTONDOWNとかWM_CONTEXTMENUとか
どこにポインタがあるかはListのメンバ関数で調べる

794 名前:デフォルトの名無しさん :04/06/26 13:14
>>791
マルチうざい

795 名前:デフォルトの名無しさん :04/06/26 17:51
他ウィンドウのサブクラス化ってできないんでしょうか?
現在アクティブなウィンドウハンドルを取得して
そのウィンドウをサブクラス化しようとしたのですが
うまくいきません。

796 名前:デフォルトの名無しさん :04/06/26 18:02
他ウインドウって何?他のプロセスのウインドウの事?
だったら、フックしてフックプロシージャ内でサブクラス化

797 名前:デフォルトの名無しさん :04/06/26 23:44
ダイアログでコントロール配置する時、
グリッドONでやっているのですが、
立ち上がり時はいつもグリッドOFFになっています。
常にグリッドONにはできるのでしょうか?

798 名前:デフォルトの名無しさん :04/06/27 00:12
教えていただきたいのですが、下記のプログラムの

void DumpLetterCode(const char* str)
{
for(; *str; str++)
printf("%02X ", (unsigned char)*str);
cout << endl;
}

for(; *str; str++) はどういう働きをするのでしょうか?
お願いします☆

799 名前:デフォルトの名無しさん :04/06/27 00:14
Visual C++.net 2003を使ってるんですが、
リソーススクリプトを直接いじりたいんですがどうやったら開けるんでしょうか?
ソリューションエクスプローラーからリソースファイルをダブルクリックしても
リソースビューにとんでしまうんですが。

800 名前:デフォルトの名無しさん :04/06/27 00:16
>>798
*strがゼロ(NULL)になるまでループ

801 名前:デフォルトの名無しさん :04/06/27 00:26
ありがとうございました☆
理解できました!!

802 名前:デフォルトの名無しさん :04/06/27 02:16
>>799
エディタ使えば?

803 名前:デフォルトの名無しさん :04/06/27 03:37
>800
>ゼロ(NULL)

(w


804 名前:デフォルトの名無しさん :04/06/27 05:04
心が狭い

805 名前:デフォルトの名無しさん :04/06/27 05:58
構成がDebugの時は _DEBUG が、Releaseの時は NDEBUG がdefineされますが、なぜ2つあるのでしょう?

どちらか片方だけ定義して、それを使うか使わないかにすれば良いのでは…?
VC7.1です

806 名前:デフォルトの名無しさん :04/06/27 08:02
ものすごーく初歩的な質問なのですが、
VC++を使うにはC++をある程度マスターしておかないと話にならないのでしょうか。

807 名前:デフォルトの名無しさん :04/06/27 09:22
>>806
ならないでしょう

808 名前:デフォルトの名無しさん :04/06/27 09:54
「ある程度マスター」ってなんか変な気がするぞ

809 名前:デフォルトの名無しさん :04/06/27 10:04
VC6 professionalを利用しております。
VC6を利用している主な理由となっているのが、Ctrl+Spaceでの入力支援なのですが、
たまぁに、自身で作ったクラスファイルがVC6側でしっかりと解析されず、含まれているはずの
メソッド、およびメンバが入力支援候補に表示されません。VC6の入力支援の候補として確実に
表示されるようにするには、何か守らなければならない文法上の注意などあるのでしょうか?

810 名前:デフォルトの名無しさん :04/06/27 10:45
>>808
オーバーロード
継承
STL
etc…
と言ったマテリアを幾つかマスターするって意味だろ。

811 名前:デフォルトの名無しさん :04/06/27 10:55
>>805
NDEBUGはassert.hの制御に使われる。_DEBUGはデバッグ版newなどの制御に使われる。
目的が微妙に異なるので別に用意されている。

例えば、Debug/ReleaseのほかにBetaを用意して、そこではNDEBUGも_DEBUGも定義しないとかね。

812 名前:デフォルトの名無しさん :04/06/27 12:20
>>809
VC++のバグだから諦めろ。

813 名前:デフォルトの名無しさん :04/06/27 12:37
>>812
.NETだとなおってる?

814 名前:デフォルトの名無しさん :04/06/27 12:41
>>809
経験上、#define で定義した型を引数につかってたり、しかもそれが #ifdef とかで面倒な条件コンパイルに
なってたりするとによく知らんぷりをされる。


815 名前:デフォルトの名無しさん :04/06/27 13:23
>>803
無知だねえ。
NULLというドイツ語はゼロを意味するんだよ。

816 名前:805 :04/06/27 13:37
>>811
レスどうもです
構成(Debug,Release)の違いを区別するための定数ではないのですね…

Releaseで使われるNDEBUGのNはNotの意味(Not DEBUG)?と勝手に解釈してましたが、
単純にそういう意味ではないのか…

ただ、assertを制御してるって事は、
Releaseする時はやはりNDEBUGを定義しとかないといけないってことですね?
# 定義されないと何が起こるのか分かってないですが… たぶん落ちるのかな??

817 名前:デフォルトの名無しさん :04/06/27 13:52
>>816
NDEBUGの意味はNotDebugでいいんでないかな。
詳しくはこの辺りが参考になるかな。
ttp://donguri.sakura.ne.jp/~shock8/wisper/debug_release.html

818 名前:デフォルトの名無しさん :04/06/27 14:37
猫でもわかるの161章にある
LRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp)
{
char str[256];

if (nCode < 0)
return CallNextHookEx(hMyHook, nCode, wp, lp);
if (wp >= 0x30 && wp <= 0x39) {
wsprintf(str, "hMyHook = %d", hMyHook);
MessageBox(NULL, str, "MyHookProc", MB_OK);
return CallNextHookEx(hMyHook, nCode, wp, lp);
}
wsprintf(str, "キー入力はインターセプトされました\n フックハンドル= %d",
hMyHook);
MessageBox(NULL, str, "インターセプト", MB_OK);
return TRUE;
}
これを実行すると
二重で動作するんですがどうしたらよいでしょうか。


819 名前:デフォルトの名無しさん :04/06/27 14:46
MFCを使ったダイアログを
スタティックライブラリで実現できるんでしょうか?

DLLで出来るのはわかってるんですが。

820 名前:デフォルトの名無しさん :04/06/27 14:50
>>819
Prof 以上ならできる。

821 名前:デフォルトの名無しさん :04/06/27 15:21
>>820
リソースは
リンクするメイン側に置くのですか?

822 名前:デフォルトの名無しさん :04/06/27 16:23
質問です。
#include<stdio.h>
main(){
int x[10]={2,1,5,3,11,6,88,27,68,0};
int *p;
p=x;
printf("%d",*p);
printf("%d",*(p+3));
printf("%d",*p+2);
printf("%d",*(p+7));
printf("%d",*p+7);
}
の結果が
234279
になるのは何故でしょうか?
*pを中心に簡潔に教えて頂けるとありがたいです。

823 名前:デフォルトの名無しさん :04/06/27 16:25
>>822
改行してないから

824 名前:822 :04/06/27 16:29
あ、理解できました。すいみません。

825 名前:デフォルトの名無しさん :04/06/27 16:48
>>822
面白すぎ


826 名前:デフォルトの名無しさん :04/06/27 19:44
Visual C++をつかってるのですが、乱数の”rand”や”srand”の関数が
使えません。これって違う型でするのでしょうか?(それはないやろうけど)
とにかく、エラーで”そんな関数あるか!!”という風に出ます。
インストールミスでしょうか?
それと、上に<・・・>のやつはインクルードしています。
よろしくお願いします。

827 名前:デフォルトの名無しさん :04/06/27 19:53
stdlib

828 名前:805 :04/06/27 20:29
>>817
参考になりました。ありがとうです。

829 名前:デフォルトの名無しさん :04/06/27 23:51
VC++6.0のソースコードエディタは
もしかしてユニコード文字を入力・表示出来ない?

830 名前:デフォルトの名無しさん :04/06/28 00:02
>>829
VC++.NETにはファイルメニューに「保存オプションの詳細設定」ってのがあるが
VC6にはない?

831 名前:デフォルトの名無しさん :04/06/28 09:31
Irfan view はテキストファイルでもビットマップイメージに変換してくれますが
あれは一体どんな方法を使っているのでしょうか?

VCでちょっと似たようなことをやりたいので
なんかヒントをください



832 名前:デフォルトの名無しさん :04/06/28 13:26
>>831
Bitmapを関連付けたデバイスコンテキストにDrawTextする

833 名前:デフォルトの名無しさん :04/06/28 17:14
DLLを使用し他プロセスのウィンドウを
WH_CALLWNDPROCでフックしたのですが
WM_KEYUPやDOWNメッセージは取得できないのでしょうか。

834 名前:デフォルトの名無しさん :04/06/28 17:15
2ちゃんねるのページ(IEとか普通のブラウザでの表示)のように、
左と右に別のスクロールを表示する方法を教えてください。

835 名前:834 :04/06/28 17:58
Win32アプリの方での作り方を教えてください。

836 名前:デフォルトの名無しさん :04/06/28 19:07
http://pc5.2ch.net/test/read.cgi/tech/1088140233/73
http://pc5.2ch.net/test/read.cgi/tech/1083585833/834
マルチ

837 名前:デフォルトの名無しさん :04/06/28 19:12
>>836
すいません。検索したらWin32が引っかかったので。
そっちのスレのほうで、聞かせていただきます。
申し訳ないです。

838 名前:デフォルトの名無しさん :04/06/28 19:36
>>829
出来ません。そもそもエディタが対応していません。
VS.NETは対応しているのでそちらを使うことをお勧めします。


839 名前:デフォルトの名無しさん :04/06/28 20:35
MFCでJavaやWin32のように、
動的にボタン等を追加することは可能でしょうか?
(あらかじめ作っておいたボタンを消しといて、
後から表示ではなくて、ファイルかなんかにボタンの数が書いてあって、
それを縦に並べたり)

840 名前:デフォルトの名無しさん :04/06/28 20:50
>>839
ダイアログアプリなら使える。
一画面のみのゲームとかならコレで十分かと。

841 名前:デフォルトの名無しさん :04/06/28 20:55
>>839
CButtonクラス

842 名前:デフォルトの名無しさん :04/06/28 21:52
DirectInputを使おうとしてプログラムを書いたのですがビルドしようとするとLINK : fatal error LNK1181: 入力ファイル "dinput8.lib" を開けません

というようなメッセージがでてしまいます、DirectXが原因かと思いDirectX 9.0bをインストールしたのですが直りません。

プロジェクト→設定→リンクのオブジェクト/ライブラリモジュールのところにはちゃんとdinput8.lib dxguid.libと書いてリンクさせています。
どなたかわかる方がいれば教えて下さい。

843 名前:デフォルトの名無しさん :04/06/28 22:23
それでパスは通っているのか?
とりあえずフルパスで書いてみろ

844 名前:デフォルトの名無しさん :04/06/28 22:24
DirectX関係のlibはちゃんと隣家から見えるところに置いてんのか?

845 名前:839 :04/06/28 22:59
>>840
ダイアログ以外は無理なんですか?

846 名前:デフォルトの名無しさん :04/06/29 00:19
>>845
MFCじゃ無理じゃないか?
やったことないから断言できないけど。

847 名前:デフォルトの名無しさん :04/06/29 00:19
自分ではわからない所があって、みなさんのお力をお借りしたと思い参りました!
int cintarray::Get(char *pN, const int index){
pName = new char[sum][strlen(pN) + 1];
strcpy(pName, pN);
CheckIndex(index);
sum++;
return j_pnum[index];
という風に、pNは名前を入力してさすポインタなんですが、
いくつかの名前を入力して、最後に入力した名前を表示させるたいと思ったのですが、
それがうまくいきません。初め[sum]は抜いていて、その時は、ひとつずつですが、表示させることができました。
で、2次元配列なら、全部をいっぺんに表示させることができるのではないか考えたのですが、
まぁ、↑にソースを見ての通り、エラーです。。。
全然わかりません。どうかお願いします。

848 名前:デフォルトの名無しさん :04/06/29 00:39
>>845
動的にCreateすればいい。

849 名前:デフォルトの名無しさん :04/06/29 01:56
dllのラッパーを作成せずに、起動中のプログラムの関数をフックするには
VirtualQueryを使えば良さそうと言うことがわかったのですが
この関数の使い方が、いまいちわかりません。

日本語で詳しい説明があるHPとか、知っている方いませんか?

850 名前:デフォルトの名無しさん :04/06/29 02:43
>>847

char **pName;

int x = sum,y = strlen(pN) + 1,i;
pName = new char*[x * sizeof(char*)];
for(i=0;i<x;i++) {
pName[i] = new char[y * sizeof(char)];
}

と2次元配列は2段階に分けて作る。
しかしこのままでは配列の大きさが決まってしまってるがね。

851 名前:デフォルトの名無しさん :04/06/29 04:14
ウィンドウプロシージャ内でオブジェクトを作り、
HANDLE_MSG(hwnd, WM_CREATE, MyWM_CREATE); として
MyWM_CREATE関数にオブジェクトを渡したいのですが方法がわかりません。

ググっているのですが情報が少なくてわかりません。どうかよろしくお願いします。

852 名前:デフォルトの名無しさん :04/06/29 09:30
DirectXを使う場合、Win32APIとMFC。
どちらを使ったほうがよいのでしょうか?

853 名前:デフォルトの名無しさん :04/06/29 09:44
DirectXを使うかどうかではなく、何を作るかによる。
目的と手段を混同するな。

854 名前:デフォルトの名無しさん :04/06/29 09:51
>>853
すいません。
つくりたいものは、一言で言うと動画再生ツールです。

855 名前:デフォルトの名無しさん :04/06/29 10:07
LNK2019 未解決の外部シンボル _XXX が関数 ZZZで参照されました
っていうエラーにおいて、

もちろん私は明示的にXXXをソース中には書いてはいないんで、XXXがどこから呼ばれてるのか
(行番号もでてこないから)分からないんですが
こういった場合効率よくエラーを取り除くにはどうすればいいでしょうか?


856 名前:デフォルトの名無しさん :04/06/29 11:00
>>854
動画再生ツールと言っても、単純にウインドウ一つで済むのか、
多数の設定メニューが必要なのか、千差万別。
まずはどういった物を作るのか、必要項目をリストアップせよ。

857 名前:デフォルトの名無しさん :04/06/29 11:16
つーか両方でできるなら組む人間の得意な方でやった方が良いんでないの?

858 名前:デフォルトの名無しさん :04/06/29 13:05
>>845
ダイアログ以外でも全然平気


859 名前:デフォルトの名無しさん :04/06/29 13:09
>>854
857にまったく同意見だなぁ
MFCで作ったほうが、メッセージ処理は楽だと俺は思うけど人それぞれだから
趣味で作ってるのなら、興味のあるほうとか得意な方でいいんじゃない

860 名前:デフォルトの名無しさん :04/06/29 13:36
すんません、VC.netなんですけどC++のヘッダのインクルードが出来ません。
以前にbcc+psdkでやってせいで環境変数が変わってしまったんでしょうか?
C系ファイルはincludeできるのですが‥パス指定したくてもどこにヘッダが置いてあるのかもわからないし。
どうすればiostream.h等のファイルがincludeできるようになるでしょうか?

861 名前:デフォルトの名無しさん :04/06/29 13:50
>>856
ウインドウは1つで済みますが、2つに分割します。

862 名前:デフォルトの名無しさん :04/06/29 13:59
>>861
それならMFCかなWTLも捨てがたいが

863 名前:デフォルトの名無しさん :04/06/29 14:16
分割ウインドウを自前で実装するのは、けっこう骨が折れる。
一度作ってしまえば再利用できるが、初回は時間がかかる。

864 名前:デフォルトの名無しさん :04/06/29 14:22
>>862 >>863
じゃあ、MFCにします。
相談、ありがとうございました。

865 名前:デフォルトの名無しさん :04/06/29 14:48
<<850
ありがとうございました!そんな方法があったんですか。
勉強不足でした。本当にありがとうございました☆


866 名前:デフォルトの名無しさん :04/06/29 15:26
>>860
エクスプローラで検索すれば見つかる
BINの下に環境設定するバッチもある

867 名前:デフォルトの名無しさん :04/06/29 18:09
あるViewの中に、好きなところにScrollViewを配置する方法ってありますか?

CSplitterWndだと、Viewが分割されてしまいます。
そうではなくて、下のように埋め込まれた感じに配置したいのです。
┌────┐
│      │
│  □ .. │
│      │  (大きい四角がViewで、小さいのがScroll。
└────┘   ずれてたらすいません。)

よろしくお願いいたします。


868 名前:デフォルトの名無しさん :04/06/29 21:57
素人な質問でスミマセンがヘッダファイルとその関数を書いたcppを利用して
main関数の書いてあるcppで使用することができるのは知っているのですが(メイン.cppとaaa.hとaaa.cppを利用してメイン.cppでaaa.cppの関数を利用)
外部に用意してあるクラスは関数と同じように外部から読み込むことはできないのでしょうか?
メイン.cppにほかに用意してあるclassをメインに記述しないで利用したいのですが。。。

869 名前:デフォルトの名無しさん :04/06/29 23:44
>>867
CScrollViewて普通にCWndとして使えないのか?

870 名前:デフォルトの名無しさん :04/06/30 01:17
>>868 もちろんできますよ。
aaa.cpp にクラスの定義
aaa.h   にクラスの宣言を書いて
メイン.cpp に aaa.h をインクルードすればいいです。

http://mikata.curiocube.com/oop/part3/ch01_classinst.html
ここにその通りのサンプルコードがありますね。

でもスレ違いですね。C++の初歩的な質問だから。

871 名前:( ´_ゝ`)フーン :04/06/30 01:18
>>867
CScrollView::Create()を使って、Viewのチャイルドウィンドウとして作成する。
そのとき7番目の引数のCCreateContext構造体のメンバ、m_pCurrentDocには
関連付けたいドキュメントクラスへのポインタを入れておく。

872 名前:790 :04/06/30 04:38
>790の質問をしたものです。

WM_LBUTTONDOWNをダイアログのプロシージャで広うようにしたのですが、
リストビューをクリックしたときには反応せず、リストビューでない場所をクリックした場合にのみ反応するのです。
どうしたら良いのでしょうか_| ̄|○

873 名前:790 :04/06/30 04:50
すみません、ぐぐったら解決しました。
NM_CLICKメッセージを拾えば良かったようです。
見つからないときはさっぱりなのに、見つかるときはあっさりですね。

874 名前:デフォルトの名無しさん :04/06/30 07:01
>>870


875 名前:デフォルトの名無しさん :04/06/30 07:04
>>870
ありがとうございます。
以上の方法でやってみたのですがコンパイルすることができませんでした。
VC++6.0を使用しているのですがどうも上手くファイルを読み込めていないようなんです。
ヘッダファイルはワークスペースの外部依存関係というフォルダがたしか前にあったと思うのですが今回はこれが作成されていないようでたぶんこれがいけないと思うのですがどうすれば作成できるのでしょうか?
初歩的過ぎますがアドバイスいただけると助かります。

876 名前:875 :04/06/30 07:50
すみません、自己解決しました
DefWindowProc呼んでませんでした
ちょっと前に話題になってるし・・・よく調べもせず、すみませんでした(TT

877 名前:876 :04/06/30 07:51
誤爆です
875さんじゃありません(TT

878 名前:デフォルトの名無しさん :04/06/30 11:18
ダイアログにラジオボタンを付けて
それにコントロール変数を追加したいんですが
VC6の時は、グループ先頭を「グループ」にチェック入れて
int変数を追加できたんだけど
VC7.1だと先頭のGroupをtrueに設定して
コントロール変数を追加しようとすると
BOOLしか追加できないみたいなんです
intで追加できないんでしょうか?

879 名前:デフォルトの名無しさん :04/06/30 11:53
リエントラントを禁止する為の、マクロかクラス
でうまい実装方法ってないでしょうか?


880 名前:867 :04/06/30 12:35
>>871
よくわからないのですが、CScrollView::Create()っていうのは、
どうやって使うのですか?
CScrollViewから派生したクラスを作っているのですが、
どうやってCreateするのか、よくわかりません。

881 名前:( ´_ゝ`)フーン :04/06/30 12:39
>>880
CWnd::Create()のヘルプを見て下さい。

882 名前:1/2 :04/06/30 13:29
はじめまして。スレ違いかもしれませんがまずはここで質問するべきだと思い書き込みました。
n×n行列の逆行列を求めるプログラム(nは1〜5)をVC++で作り、DLLを使って
VBで動作するようにしたいのですがDLLの作り方やexport関数などよくわかりません。
どなたか教えていただけないでしょうか?
環境 OS;XP、VisualC++6.0、VisualBasic6.0
下に逆行列を求めるプログラムを記載します。

883 名前:2/2 (1) :04/06/30 13:36
#include<iostream>
using namespace std;

int main(){
int dim, i, j, k; /* カウンタ */
double pivot,erase; /* ピボット数、消去係数 */
double** a; /* 連立方程式の各係数 */

cout << "行列の次数は : "; /* 次元数の入力 */
cin >> dim;

a = new double*[dim]; /* メモリ確保 */
for(i=0;i<dim;i++)a[i] = new double[dim*2];

for(i=0;i<dim;i++){ /* 係数入力部 */
for(j=0;j<dim;j++){
cout << "a[" << i << "][" << j << "] : ";
cin >> a[i][j];
}
}

すみません、思ったより長くなったので分割させて記載させてもらいます

884 名前:2/2 (2) :04/06/30 13:37
for(i=0;i<dim;i++){ /* 右半分に単位行列代入 */
for(j=dim;j<dim*2;j++){
a[i][j] = 0;
if(i==j-dim) a[i][j] = 1;
}
}

for(i=0;i<dim;i++){ /* 掃き出し部 */
pivot = a[i][i]; /* ピボット数を取得 */
for(j=i;j<dim*2;j++) a[i][j]/=pivot; /* n式をピボットで割る */
for(k=0;k<dim;k++){ /* n項を消去する */
erase=a[k][i]; /* 消去する式の係数 */
for(j=i;j<dim*2;j++){ /* 実際の掃き出し処理 */
if(k!=i) a[k][j]-=erase*a[i][j];
}
}
}

for(i=0;i<dim;i++){ /* 結果表示 */
cout << " ( ";
for(j=dim;j<dim*2;j++){
cout << a[i][j] << ' ';
}
cout << " ) " << endl;
}
return 0;
}
(バックナンバーアルゴリズム50より記載)
長文すみませんがどうかよろしくお願いします。

885 名前:デフォルトの名無しさん :04/06/30 14:22
>>882
まずはDLLの作り方を検索したらいいと思うぞ。

886 名前:デフォルトの名無しさん :04/06/30 18:42
自作アプリで、F1キーを押すとヘルプが立ち上がろうとするんですが、
F1キーを別の用途で使いたいので、このヘルプを無効にするには
どうしたら良いですか?


887 名前:デフォルトの名無しさん :04/06/30 18:49
F1キー押した時の処理を追加する

888 名前:デフォルトの名無しさん :04/06/30 19:54
MFCならPreTranslateMessageで、F1キーの処理を加える
ヘルプが起動しないようにするだけならWinHelpをオーバーライドして
なにもしないようにするとかね


889 名前:886 :04/06/30 20:39
>>887
>>888
できましたヽ(´∀`)ノ

890 名前:デフォルトの名無しさん :04/06/30 20:55
カナを漢字に変換するにあたり変換候補を取得したいのですが
ImmGetConversionList(..., GCL_CONVERSION )以外で
変換候補を取得できないでしょうか?
IMEの変換候補と比べると上記は取得できる候補が少ないので・・・。
IMEと同等の変換候補を取得する方法など何かご存知でしたら
教えてください。
宜しくお願いします。


891 名前:デフォルトの名無しさん :04/06/30 22:27
WM_IME_* メッセージあたりになかったっけ?
あれ結構ごちゃごちゃしてて全部見てないけど

892 名前:デフォルトの名無しさん :04/06/30 22:42
VC6.0であったALT+F8の整形機能はVS.NETではどうなってますか?

893 名前:デフォルトの名無しさん :04/06/30 22:44
>>892
あるよ

894 名前:890 :04/06/30 22:46
>>891
IMEの変換候補ウィンドウを表示するでなく
変換候補の文字列を取得したいのです。
なにかご存知でしたらお願いします。
Imm関係を調べたのでですが情報が少なくて・・・。

895 名前:デフォルトの名無しさん :04/07/01 09:36
通常使うプリンタを変更する方法はないもんでしょうか。

環境は windows2000  VC++ ver5.0 です

スタート->設定->プリンタ でチェックマークがついてるプリンタを
VCアプリケーションで変えたいのですが

WriteProfileString("windows", "device", "Printer name,Printer driver,port");
これをやっても何も変化がないのです。


調べた範囲では
windows2000では無理っぽいということなんですが

GetProfileString("windows", "device", Buffer );
でBufferに取ってきたものを見ても
x. とか b というような意味がない文字しか入ってこないです。

はたして通常使うプリンタの変更は不可能なのでしょうか?

896 名前:デフォルトの名無しさん :04/07/01 11:34
>>895
よく分からないが、そういうものはレジストリに設定があるんだろうから、それを
見つけて直接読み書きした方が手っ取り早くないかな?

ttp://www7.big.or.jp/~pinball/discus/pb/log/020516/935.html
これかな?

897 名前:デフォルトの名無しさん :04/07/01 16:35
>>894
WM_IME_COMPOSITIONだよ。

898 名前:デフォルトの名無しさん :04/07/01 21:31
初歩的な質問になりますが、よろしくお願いします。
VC++で新規のプロジェクトを作成する時に、
MFCアプリケーションを選択した場合、
同じプロジェクト内でWIN32APIは使用できなくなるのでしょうか?

899 名前:デフォルトの名無しさん :04/07/01 21:35
VC++ .NET 2003でビルドするたびにリソースのバージョン番号を
増やしていってくれるような仕組みってありませんか?
VC++6用のシェアウェアはあるようですが。
Visual SourceSafeかなんかでできるんでしょうか?

900 名前:デフォルトの名無しさん :04/07/01 21:44
>>898
ならない。

901 名前:デフォルトの名無しさん :04/07/01 22:02
>>898
そもそもMFCだけでまともなコーディングが出来ん。

902 名前:デフォルトの名無しさん :04/07/01 22:05
>>898
MFCのソースを軽くでいいから覗いてごらん


903 名前:デフォルトの名無しさん :04/07/02 17:30
最近、VCを習い始めたのですが、
ビルドは通るのにexeを実行すると、すかさず下記のエラーがでる。という症状が何回か出て参っています。

「XXXXの命令がXXXXのメモリを参照しようとしました。メモリがreadになる事は有りませんでした。」

このエラー原因の可能性としては、どのような点があるでしょうか?
何回かこのエラーが出くわしたのですが、このエラーが出るたびにバックアップから作り直し、
3歩進んで2歩下がる状態で開発が進んでいます。作り直すとなぜかエラーが出なくなります…

904 名前:デフォルトの名無しさん :04/07/02 17:41
>>903
>ビルドは通るのに

文法上は正しくても動作としておかしなコードが混じっているからそうなる。
バッファの取り扱いに注意。

一連の初期化処理の中におかしなところがあるんだろう。詳しいことはプログラム
の中を見ないとわからない。

あるいはビルドを繰り返しているうちにそうなるなら、中間ファイル類を全て削除して
からビルドしなおしてみる。

905 名前:デフォルトの名無しさん :04/07/02 17:46
>>904
回答有り難うございます。
Debugフォルダを全削除して、ビルドしなおしたら直りました。
バグみたいなもの?
VCってワケわからんです。もうツカレタ…orz

906 名前:デフォルトの名無しさん :04/07/02 17:46
>>903
ぬるぽっ

907 名前:デフォルトの名無しさん :04/07/02 18:02
>>905
エラーが出た状態のままの中間ファイルが残ったため。
VCはビルドするとき、ファイルの日時を見てビルド対象を決めているが、
その時エクスプローラーが邪魔すると、
お互い待ち状態になったり、日時の確認を中断してビルド続行してしまったりする。

908 名前:デフォルトの名無しさん :04/07/02 18:10
>>905
もう一度ソースを確認することをお勧めする
それで治ったってのはただの偶然の可能性もあるよ
ちなみに、上記のエラーは一般アプリが読んでははいけないと
マークしているメモリを読もうとしたために起きたエラー

ちなみにデバッガ上でやってもそうなる?
デバッガ上でも出るならデバッガ使って原因を追求するべきだし
デバッガが使えないのなら、ワトソン博士にコアダンプ吐かせても良いかも
mapファイルの作成は忘れずにね

904が言うようにオブジェクトのリンクに際して起きる場合もあるかも
もし多人数で開発しているのなら、各PCの時計を正確に合わせておいたほうがいいよ

909 名前:デフォルトの名無しさん :04/07/02 18:11
そもそも>>903はデバッグ方法全然知らんだろ?
リファレンスくらい目を通しとけ。

910 名前:(1/3) :04/07/02 21:34
すいません、次のようなクラス・ファイル構成で実行時エラーが出ます。
解決策等をご存知でしたらご教授ください。

--- fuga.h ---
#ifndef __fuga_h__
#define __fuga_h__

class hoge;

class fuga{
  hoge* pHoge_;
public :
  void SetHoge(hoge* pHoge) { pHoge_ = pHoge; }
};

#endif// __fuga_h__

911 名前:(2/3) :04/07/02 21:35

--- hoge.h ---
#ifndef __hoge_h__
#define __hoge_h__

#include "fuga.h"

class hoge{
  int x;
};

class hogehoge{
  fuga* pFuga;
public :
  void SetFuga(void){
    pFuga->SetHoge(new hoge);
  }
};

#endif// __hoge_h__

912 名前:デフォルトの名無しさん :04/07/02 21:35
--- test.cpp ---
#include "hoge.h"

int main(void){
hogehoge* pHogehoge = new hogehoge;
pHogehoge->SetFuga();
}

エラーは「***の命令が***のメモリを参照しようとしました。メモリがreadになることはできませんでした。」
というものです。

環境はVC++6 SP5です。
ちなみに友人にBCCでコンパイルしてもらったところエラーは発生しませんでした。

長々と申し訳ありませんがよろしくお願いします。

913 名前:デフォルトの名無しさん :04/07/02 21:37
>>912
>>903

914 名前:910-912 :04/07/02 21:39
ちなみにデバッガで追ったところ

int main(void){
hogehoge* pHogehoge = new hogehoge;
  pHogehoge->SetFuga();  // ←
}

の部分でエラーが発生しているようです。

915 名前:デフォルトの名無しさん :04/07/02 21:43
>>913

>>903-はすでに見させていただきましたが、
それとは違うと思うのですが…。
もちろんリビルドなどは行いました。

916 名前:デフォルトの名無しさん :04/07/02 21:56
    pFuga->SetHoge(new hoge);

pFugaのインスタンス作ってないのに、メソッドを呼ぶなハゲ。
上のやつもそうだが、VCに問題があるような書き方するな
こんなレベルじゃ、たとえ糞コンパイラ使っていてもコンパイラを疑う資格すらない。

917 名前:910-912 :04/07/02 22:10
>>916
ああああ、申し訳ない

プロジェクトから簡略化して切り出したときに入れ忘れてました。
ということでそのファイルは無事実行できました。BCCは単に運よかっただけみたいですね。

ということはこれはプロジェクト自体のエラーの原因ではなかったみたいです。

本当に申し訳ありません。

918 名前:デフォルトの名無しさん :04/07/02 23:17
BCCのうんこっぷりが証明されました

919 名前:デフォルトの名無しさん :04/07/02 23:45
CDプレイヤーを作りたいんですが、どうしたらいいんでしょうか?

920 名前:デフォルトの名無しさん :04/07/02 23:49
もう国内に工場ないと思うよ

921 名前:919 :04/07/02 23:50
いや、機械じゃなくて、ソフトです。

922 名前:デフォルトの名無しさん :04/07/02 23:51
ミツミは国内に工場あるんでねーの?

923 名前:デフォルトの名無しさん :04/07/02 23:53
MCI_SETでmciSendCommandの第3引数にMCI_SET_DOOR_OPENを渡してみたらどうでしょう。

924 名前:デフォルトの名無しさん :04/07/03 00:26
Visual C++ .NETを使っています。
学校ではVisual C++ 6.0を使っているので、そちら用の参考書
(3週間マスターVisual C++6.0,日経BP社)を借りて勉強していたのですが、
C++ .NETにはClass Wizardがないので「Class Wizardを使って、CTimersDlgクラスに、
WM_TIMERメッセージに対応する為の関数OnTimerを追加する」という所で詰まってしまいました。
クラスビューでCTimersDlgを右クリックして追加から関数の追加を選択し、戻り値の型voidと、
UINT(Unsigned int?)型のパラメータnIDEventを追加して、参考書通りのコードを追加したのですが、
思い通り(時刻を取得し書式を整えてダイアログに表示する)の動作をしません。
考えてみればWM_TIMERメッセージに対応させる操作が抜けているので当たり前だとは思ったのですが、
解決法が思いつきません。
どのようにすればいいのでしょうか?

925 名前:デフォルトの名無しさん :04/07/03 00:31
>923

ありがとう御座います。
やってみます。

926 名前:デフォルトの名無しさん :04/07/03 00:33
>>924
1.リソースからダイアログの編集画面を出す(絵になっててボタンとかくっつけていくやつ)
2.ダイアログ上で右クリックし「プロパティ」
3.「プロパティ」のビューにある「メッセージ」というボタンを押す

927 名前:デフォルトの名無しさん :04/07/03 00:33
>>924
クラスビューのCTimersDlgを右クリックして
「Windowsメッセージハンドラの追加」で、左のリストから
WM_TIMER をクリックして「ハンドラの追加」ボタンを押すと
OnTimer関数をオーバーライドしたものが自動で生成される。
後はMSDNで。

928 名前:927 :04/07/03 00:34
おっと失礼 .NETですか

929 名前:924 :04/07/03 00:51
>>926
ありがとうございます。
ここのWM_TIMERの右側にOnTimerと追加すればいいんですよね?
でも一度自分で手書きで書いてしまった為か、TimerDlg.cppのOnTime関数は消したのに
「オーバーロードされた関数'OnTime'は既に存在しています」と出てしまいました。
関数を消すだけではダメなのでしょうか…?

930 名前:デフォルトの名無しさん :04/07/03 00:51
Visual Basicに対抗してMiserable Basic開発したいんですけど。

931 名前:デフォルトの名無しさん :04/07/03 00:53
最近ちょっとVC#をかじってみたが、確かにポトペタ環境は楽ですが
が職業上FA関係のライブラリを使うため、それらのライブラリをイチイチ
DllImportするのは面倒なため、やっぱりとうぶんVC++から離れなれない・・・

932 名前:924 :04/07/03 01:28
>>929
自己レス
TimerDlg.hの方のOnTimerに関する記述を消せば大丈夫でした。

>>926さん、>>927さん、ありがとうございました。

933 名前:デフォルトの名無しさん :04/07/03 01:32
>>931
VC++もポトペタだがいつの時代から来た人だ?

934 名前:デフォルトの名無しさん :04/07/03 01:35
>>933
はぁ?
なに言っての、このボンクラ

935 名前:デフォルトの名無しさん :04/07/03 01:40
>>934
>>933はダイアログアプリしか作ったこと無いんだ。許してやれ。
もしくはVBと勘違いしてんだ。

936 名前:デフォルトの名無しさん :04/07/03 01:49
DllImportするのは面倒なため

937 名前:デフォルトの名無しさん :04/07/03 01:53
>>935
バージョンアップする金も.NETに移行する気もない貧乏はすっこんでろ!

938 名前:デフォルトの名無しさん :04/07/03 01:53
ビットマップをLoadBitmapで読み込むさいに、lpBitmapNameをMAKEINTRESOURCE(IDB_BITMAP1)
のようにしてやろうとしたのですが認識してくれないです。
定義漏れがあるのかと思ってリソースのヘッダファイルも確認するとしっかり定義されてました。
ちなみにIDを文字列にしてやるとできました。
どういう原因が考えられますか?

939 名前:デフォルトの名無しさん :04/07/03 02:13
resource.hでIDを定義してないから文字列扱いにされてる

940 名前:デフォルトの名無しさん :04/07/03 03:14
>>939
> 'IDB_BITMAP1' : 定義されていない識別子です。
メッセージがこうでてるし、文字列ならビットマップは表示されるので
resource.hでIDを定義しわすれてるとしか考えられないのですが、
実際resource.hをひらいて確認するとちゃんと定義されてるんです。
どういうことなんでしょうか・・・。

941 名前:940 :04/07/03 03:18
あとメニューやダイアログボックスなどのリソースはMAKEINTRESOURCEを使って
読み込めます。
そもそもビルドすれば勝手にresource.hにIDの値定義してくれますよね?


942 名前:デフォルトの名無しさん :04/07/03 09:22
#include "resource.h"

943 名前:デフォルトの名無しさん :04/07/03 11:41
ポトペタってなんですか?教えてエロいひと

944 名前:デフォルトの名無しさん :04/07/03 11:44
ポト ペタ ピッタンコ この世で一匹!

945 名前:デフォルトの名無しさん :04/07/03 11:53
ポトっと落としてペタって貼り付ける

946 名前:940 :04/07/03 12:23
>>942
(/ω\)ハズカシーィ
インクルードしてませんでした・・・・。はぁ・・。
とりあえずありがとうございました・・・。

947 名前:デフォルトの名無しさん :04/07/03 12:45
ぼっとん便所

948 名前:デフォルトの名無しさん :04/07/03 14:31
なんだなんだ今日はずいぶんとレスついてるな


949 名前:デフォルトの名無しさん :04/07/04 13:59
Microsoft Visual C++ でGTK+ が使いたかったので
Windows用のGTK+を↓このページからダウンロードしてインストールしました
ttp://www.dropline.net/gtk/
こののライブラリをVC++で使うにはどうしたらいいですか?

教えてくださいお願いします

950 名前:949 :04/07/04 16:06
忘れてました
バージョン 6.0 です

951 名前:デフォルトの名無しさん :04/07/04 16:07
:: GTK+ for Windows ::
http://www.dropline.net/gtk/support.php

952 名前:デフォルトの名無しさん :04/07/04 17:15
VC6.0 win2k
スプリッタで左右に分けています。右ペイン(CTreeView)から左ペインの
CHtmlView のナビゲート関数をCHtmlViewで実行するとナビゲート関数の
初めでASSERT します。
どうしたらいいのでしょうか。


953 名前:949 :04/07/04 20:15
>>951
そのページ読んでみました
エラーが出なくなるまで全てのインクルードファイルを
ツール→オプション→ディレクトリタブ
の中に書き込みました

次に
プロジェクト→設定→リンクタブ→カテゴリ[一般]→オブジェクト/ライブラリモジュール
に、上のページで書かれていた
-lgtk-win32-2.0 -lgdk-win32-2.0 -lgthread-2.0 -lgdi32 -lole32 -luuid -latk-1.0
-lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0
-lgmodule-2.0 -lglib-2.0 -lintl -liconv
を書き込みました。
これでビルドできると思ったのですが、LINKで
LINK : warning LNK4044: オプション "lgtk-win32-2.0" は無効です; 無視されます
などのエラーが起こります。
-lのせいなのかと思い -l を取り除いてやってみたのですが、やはりうまくいきませんでした。

根本的にどこかが違うのでしょうか?

954 名前:デフォルトの名無しさん :04/07/04 20:25
>>953
それはgcc用の設定では

955 名前:949 :04/07/04 20:29
>>954
そうでしたか(汗
では、 Visual C++ 6.0 ではどうしたらいいのでしょうか?

956 名前:デフォルトの名無しさん :04/07/04 20:33
>>955
>>951のページをもちょっと下まで読む

957 名前:949 :04/07/04 20:52
>>956
そうでしたか、早速やってみました

プロジェクト→設定→C/C++タブ→カテゴリ[プリプロセッサ]→インクルードファイルのパス
に書かれていたように

glib-2.0.lib gtk-win32-2.0.lib gdk-win32-2.0.lib gobject-2.0.lib gdk_pixbuf-2.0.lib gthread-2.0.lib gmodule-2.0.lib pango-1.0.lib

を書きました
しかし、今度は

gtk+test.obj : error LNK2001: 外部シンボル "_gtk_main" は未解決です
gtk+test.obj : error LNK2001: 外部シンボル "_gtk_widget_show" は未解決です
gtk+test.obj : error LNK2001: 外部シンボル "_gtk_window_new" は未解決です
gtk+test.obj : error LNK2001: 外部シンボル "_gtk_init_abi_check" は未解決です
Debug/gtk+test.exe : fatal error LNK1120: 外部参照 4 が未解決です。
link.exe の実行エラー

というエラーが出てきます。

何が足りなかったのでしょうか?

958 名前:949 :04/07/04 23:52
よくわからなかったので
>>951のページでダウンロードした、ヘッダファイルを全てツール→オプション→ディレクトリタブ
に書き込んでみました。

すると
d:\my documents\my pictures\program用\課題\gtk+test1\gtk+test.cpp(1) : fatal error C1083: インクルード ファイルがオープンできません。'gtk/gtk.h': No such file or directory
cl.exe の実行エラー

とエラーがでてきます。
このフォルダ内をgtk/gtk.hで検索かけたところ、ヒットしませんでした。

そのほかのヘッダファイル内には、xxx/xxx.hの記述がたくさん見られます
しかし、やはりそのような名前のヘッダファイルはありませんでした。

これは何か意味があるのでしょうか?
少し、スレ違いな質問になってしまいましたが、わかる人教えてください。お願いします。

959 名前:デフォルトの名無しさん :04/07/04 23:59
\=/

960 名前:949 :04/07/05 00:18
>>959
そういうことでしたか、>>958の問題は解決しました

しかし、また>>957の状態に戻ってしまいました
ライブラリの指定方法が悪いのでしょうか?

961 名前:デフォルトの名無しさん :04/07/05 01:09
>>960
これってVC7の話?
単純にライブラリを指定していないだけでは
インクルードパスとはライブラリモジュールを指定することは別だよ

962 名前:949 :04/07/05 01:37
>>961
ありがとうございます。そうみたいでした。
プロジェクト→設定→リンクタブ→カテゴリ[一般]→オブジェクト/ライブラリ モジュール に
glib-2.0.lib gtk-win32-2.0.lib gdk-win32-2.0.lib gobject-2.0.lib gdk_pixbuf-2.0.lib gthread-2.0.lib gmodule-2.0.lib pango-1.0.lib
と書き加えたところ、うまくビルドできました。

しかし、実行時にエラーが出ました。(下はエラーメッセージです)

コンポーネントが見つかりません
libgtk-win32-2.0-0.dll が見つからなかったため、このアプリケーションを開始できませんでした。
アプリケーションをインストールし直すとこの問題は解決される場合があります。

やはり、まだライブラリが指定されていないためでしょうか?

963 名前:デフォルトの名無しさん :04/07/05 02:15
チンコのしごきが足らん

964 名前:デフォルトの名無しさん :04/07/05 02:49
クラスのオブジェクトはif文やfor文の中では作成できないのでしょうか?
たとえば
int main{

int a=0;

if(a = 0){
クラス名<テンプレート引数> オブジェクト名;
}

}
という感じです。



965 名前:デフォルトの名無しさん :04/07/05 05:49
>>964
やってみればいいじゃん。必要ならエラーコードをここに貼ってみ。
#つーか、喩えで書いたにしてもダメ過ぎ。

966 名前:964 :04/07/05 06:17
ifの中でなく外でオブジェクトを作成すれば動きます。
このままだと
魔王と戦う.cpp(45) : error C2065: 'g' : 定義されていない識別子です。
魔王と戦う.cpp(45) : error C2228: '.Play' : 左側がクラス、構造体、共用体ではありません。
となります。
コードです
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_23/help.txt

967 名前:デフォルトの名無しさん :04/07/05 06:20
>>966
cout << "無効な数字が入力されました。もう一度入れなおしてください\n";の後に}付け忘れました。
上のエラーはこれをつけたときのエラーです。

968 名前:デフォルトの名無しさん :04/07/05 07:01
>>962
GTKを使ったことが無いから良く分からないんだけど
COMコンポーネントなのかな?
RegSvr32でインストールしないと駄目とか
それともただ単純に検索パス上にDLLが無いだけとか
そこら辺はドキュメントに載っていると思うけど

969 名前:デフォルトの名無しさん :04/07/05 07:08
>>964
>クラスのオブジェクトはif文やfor文の中では作成できないのでしょうか?
そんなことはないです.
ifの中ででオブジェクトを作っといて,g.Play ();をコメントアウトしてもコンパイル通るでしょう?
オブジェクトのディストラクタはいつ呼ばれるのかを考えましょう.


970 名前:デフォルトの名無しさん :04/07/05 07:23
>>962
GTK-RuntimeをインストールしてPATHを設定しないと動きま千円。
http://prdownloads.sourceforge.net/gtk-win/GTK-Runtime-Environment-2.2.4-3.exe?download

971 名前:デフォルトの名無しさん :04/07/05 07:43
>>964
>966のようなケースの場合、テンプレートよりも継承の方がいいと思う。
#詳しくはEffectiveC++参照で。(’’

それはさておき、ブロック内で宣言したオブジェクトのスコープはブロック内部のみなので
条件によってテンプレートクラスの型を変えることは事実上無理。
あーでも、継承なら基底クラスのポインタを使って似たようなことが可能だな。

例えば
CBattle * encount
= choice == VersusMao ? (CBattle *) new BattleVsMao
: choice == VersusCat ? (CBattle *) new BattleVsCat
: NULL;
こんな感じかね。

>>969
>オブジェクトのディストラクタはいつ呼ばれるのかを考えましょう.


972 名前:デフォルトの名無しさん :04/07/05 07:55
>>966
C++初心者にも関わらずテンプレートを
使うあたりの心意気に感動した
スコープって分かる?

#include <iostream>
using namespace std;
int main()
{
int i = 0 ;
cout << i << endl;
{
int i = 3;
cout << i << endl:
}
cout << i << endl;
return 0;
}
変数は宣言したブロック{}の中でのみで生きられる
>>966のソースでgはどこで宣言されている?


973 名前:デフォルトの名無しさん :04/07/05 09:04
VC.NETでMFCの使用をスタティックライブラリにすれば
MFC71.DLLが相手にインストールされてなくても動くらしいのですが、
MSVCRT.DLL(C Runtime Library)を実行ファイルに含ませるには
どうすれば良いのですか?



974 名前:デフォルトの名無しさん :04/07/05 09:10
>>969-971-972
playを宣言する位置がまずかったんですね、ご指摘ありがとうございます。
スコープのところを読み直してきます。

975 名前:デフォルトの名無しさん :04/07/05 09:12
>>973
プロジェクトのプロパティページで設定する。

976 名前:デフォルトの名無しさん :04/07/05 09:13
>974は激しく解かっていない悪寒。

977 名前:デフォルトの名無しさん :04/07/05 09:17
>>975
ランタイムライブラリをマルチスレッド(/MT)にすればいいのでしょうか?

978 名前:デフォルトの名無しさん :04/07/05 09:19
これほど話がかみ合わないのも面白い。

>>977
「MFCをスタティックリンクする」と言った趣旨の項目があるはずだが。
#仕事柄VisualStudioは6も7も使っているので詳細は覚えていない罠。
##しかも自宅にはcygwin環境しかないので確認もできない罠。

979 名前:973 :04/07/05 09:27
>>978
その設定でMFC71.DLLは静的リンクにしているのですが、
VCはMSVCRT.DLLをライタイムライブラリとして使用していると
聞いたものですから、できればMSVCRT.DLLも静的リンクしたいのです

980 名前:969 :04/07/05 09:43
>>974
966のソースのmain関数内で,
if(sentaku==1){
Game<Mao, Hero> g;
+ g.Play ();
} else{
Game<FNeko, Hero> g;
+ g.Play ();
}
-g.Play ();
として,Playをgの宣言と同一スコープ内で呼ぶか,(続く)


981 名前:969 :04/07/05 09:44
(続き)971の言うようにGame.hを
+class Game_Base {
+public:
+virtual ~Game_Base () {}
+virtual void Play() = 0;
+};
template<class T, class U>
-class Game{
+class Game: public Game_Base{
として,Gameクラスを基底クラスGame_Baseから継承し,main関数内で
+Game_Base *g;
if(sentaku==1){
- Game<Mao, Hero> g;
+ g = new Game<Mao, Hero> ();
} else{
- Game<FNeko, Hero> g;
+ g = Game<FNeko, Hero> ();
}
-g.Play ();
+g->Play ();
+delete g;
として,ifの外側に宣言した基底クラスのポインタを使ってPlayをコールすると良いです.


982 名前:969 :04/07/05 09:47
ちょっと間違った.
ややこしいですが,981のelse節の
+ g = Game<FNeko, Hero> ();

+ g = new Game<FNeko, Hero> ();
です.


983 名前:949 :04/07/05 10:15
>>970
早速、GTK-Runtimeをインストールしました

PATHの設定はどこでやればいいのでしょうか?

984 名前:( ´_ゝ`)フーン :04/07/05 12:52
>>977
そのとおり

>>978
お前が一番分かってない。
MFCとランタイムライブラリの設定は別項目。

985 名前:949 :04/07/05 13:13
英語の能力がない私ですが、がんばって
:: GTK+ for Windows ::
http://www.dropline.net/gtk/support.php
を訳しました

そこで
マイコンピュータ→プロパティ→詳細設定タブ→環境変数ボタン→システム環境変数→Pathをダブルクリック
→変数値の最後にbinとlibのパスを入力(セミコロンで区切る)
をするようなことを書いてあったので、やってみました。

すると、やっと成功しました!((涙))

このスレでアドバイスしてくださった皆さんありがとうございました!

986 名前:デフォルトの名無しさん :04/07/05 13:22
>>985
intl.lib iconv.lib ←これも要るかも

987 名前:デフォルトの名無しさん :04/07/05 13:34
>>980-981
何度も丁寧にありがとうございます。
初心者以前の質問、応答をしてしまい無能さを知らされました。
もうすこしがんばります。


988 名前:デフォルトの名無しさん :04/07/05 14:24
そろそろ次スレよろ

989 名前:969 :04/07/05 14:33
>>987
じゃ,ついでに気付いたことを上げておきます.
分かってわざと省略してるのであれば,ごめんなさい.

1. ヘッダファイルではインクルードガードをした方が良いと思います.
インクルードガードの解説は以下に詳しいです.
http://www.02.246.ne.jp/~torutk/cxx/file/includeguard.html

2. ヘッダファイル内ではusing namespace std;をしない方が良いと思います.
名前空間は名前の衝突を避けるためにあります.一方,
ヘッダファイルは複数のコンパイル単位(一cppファイルあたり一コンパイル単位と考えてよい)
で共有されます.
ヘッダファイル内でusing namespace std;してしまうと,
このヘッダファイルを共有してるコンパイル単位全部でstdを晒すことになり,
名前空間の存在意義に反します.
using namespace std;はせいぜいcpp内で使うに止めておくことをお薦めします.
当り前ですが,これはcppファイルが(ヘッダファイルのように)他ファイルから
includeされてないことが前提の話です.

3. ソースファイルのファイル名に日本語を使うのは....
「動くからいいじゃない.」と言われれば反論はしませんが.


990 名前:デフォルトの名無しさん :04/07/05 14:38
Microsoft Visual C++ .NETで作ったプログラムを使うとき
.NET Frameworkいるんですか?

991 名前:デフォルトの名無しさん :04/07/05 14:42
>>990
いる場合もあれば、いらない場合もある。

992 名前:デフォルトの名無しさん :04/07/05 14:44
>>991
それってランダムなんですか?

993 名前:デフォルトの名無しさん :04/07/05 14:52
ランダムとか怖いな・・・

994 名前:990 :04/07/05 14:57
どんなときに必要なんでしょうか?

995 名前:デフォルトの名無しさん :04/07/05 15:06
>>992
ワロタ

996 名前:デフォルトの名無しさん :04/07/05 15:11
次スレたってないね。

997 名前:デフォルトの名無しさん :04/07/05 15:29
↓お前が立てろ!

998 名前:デフォルトの名無しさん :04/07/05 15:31
↓と>>997が言ってるぞ!

999 名前:デフォルトの名無しさん :04/07/05 15:37
│    _、_
│  ヽ( ,_ノ`)ノ 残念それは私のおいなりさんだ
│ へノ   /
└→ ω ノ
      >

1000 名前:デフォルトの名無しさん :04/07/05 15:42
1000.Net


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