トップページ⇒tech
1001コメント306KB

【初心者歓迎】C/C++室 Ver.8【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。

【初心者歓迎】C/C++室【環境依存OK】
http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
【初心者歓迎】C/C++室 Ver.2【環境依存OK】
http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
【初心者歓迎】C/C++室 Ver.3【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
【初心者歓迎】C/C++室 Ver.4【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
【初心者歓迎】C/C++室 Ver.5【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (html化待ち)
【初心者歓迎】C/C++室 Ver.6【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1082182233/l50
【初心者歓迎】C/C++室 Ver.7【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1086373839/l50

【ラウンジ】質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
0153デフォルトの名無しさんNGNG
>>151
描画コマンドはメタファイルとして保存できる
描画結果だけならDIBセクションとか使ってDIBにBltすればいい。
0154151NGNG
>>152
実は、リアルタイム通信じゃ無かったりします
クライアント1が描いてる間、他のクライアントは絵の内容を見れません
イメージとしては
C1が絵を描く→描き終わったらSへ画像データを送信→C2が画像を見る
※C・・クライアント S・・サーバ
なので、絵を見たり描いたり出来るのは同時に1人だけです

>>153
メタファイルというのは初耳です
DIBセクションというのは、BitBltみたいな感じなんでしょうか
ちょっと調べて見ます

どうもありがとうございました
0155151NGNG
うぅ・・サゲ忘れてた・・
0156151NGNG
連続ですみません
どーしてもわからないので、ちょっと現在のソースをUpしてみます
ttp://gamdev.org/up/img/980.zip

結局どこに画像のデータが入ってるのかわからずじまいです・・・
何かアドバイスをお願いします
0157デフォルトの名無しさんNGNG
>>156
lpBMP
0158デフォルトの名無しさんNGNG
環境依存だということなので、こちらで質問させていただきます。

空のフォルダを削除するにはどうしたらいいのでしょうか?
googleで検索してもなかなか見つからず、
やっとサンプルコードが見つかったと思ったら、ないヘッダがインクルードしてあって
結局分かりませんでした。

0159デフォルトの名無しさんNGNG
>>158
ないヘッダって何?
0160デフォルトの名無しさんNGNG
>>158
環境書けやコラ
0161デフォルトの名無しさんNGNG
c++には、javaの親クラスを指す
superのようなのはないんですか?
0162デフォルトの名無しさんNGNG
>>158
C++なら,
#include <cstdio>
int main () {
std::remove("hoge");
return 0;
}
Cなら,
#include <stdio.h>
int main () {
remove("hoge");
return 0;
}
とか.hogeはパスです.
0163151NGNG
>>157
言われた通りにデータ構造体に void* lpBMPを追加して
直接RGBの値(輝度?)を設定して画面全体が水色になったサーバ上の絵を
クライアントに送りました
[クライアントのデータ受信](データ受信時に画像作成)
hBitmap = CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, &g_RcvPictureData.lpBMP, NULL, 0);
こんな感じにしてみたんですが、残念なことにクライアントでは画面真っ黒な状態です・・・
サーバでは水色になってるんですが
lpBMPだけじゃダメなんでしょうか・・・
うーむ・・デバイス独立ビットマップっていうぐらいだから、DCに依存しないと思うんですが
謎です・・・困った
0164デフォルトの名無しさんNGNG
>>162
158ではないが、今のremoveはフォルダ/ディレクトリを消せるのか。知らなかったよ。
0165デフォルトの名無しさんNGNG
>>163
ポインタじゃなくて中身をコピーしろよ
0166151NGNG
>>165
中身・・・ですか
サーバ側では送信データのlpBMPに対して
((char*)g_SndPictureData.lpBMP)[offset+2] = 127;
このように直接値を入れて、これをそのままクライアントに送ってるのですが
これだと中身は送られてないんでしょうか・・・
0167162NGNG
>>164
Linuxのmanによると,
>remove deletes a name from the filesystem. It calls unlink for files,
>and rmdir for directories.
と書かれています.
標準ライブラリなのでたぶん158の環境でも大丈夫だと思うんですけどね.
0168デフォルトの名無しさんNGNG
ディレクトリの削除が可能かどうかは実装依存
0169デフォルトの名無しさんNGNG
>>167
removeは標準ライブラリじゃねーよ
0170デフォルトの名無しさんNGNG
>>169
http://66.102.7.104/search?q=cache:EXoeqkMCCkcJ:docs.hp.com/ja/B2355-60104-07/remove.3C.html+remove+ANSI+C&hl=ja&lr=lang_ja&inlang=ja
0171デフォルトの名無しさんNGNG
ここの方が標準ライブラリと明記されてるからいいよ
http://66.102.7.104/search?q=cache:aK3AwFixgYsJ:www.st.rim.or.jp/~phinloda/cqa/cqa13.html+remove+ANSI+C&hl=ja&lr=lang_ja&inlang=ja
0172デフォルトの名無しさんNGNG
本日のバカ
----------------------------------------------------------

169 名前:デフォルトの名無しさん[sage] 投稿日:04/08/06 03:58
>>167
removeは標準ライブラリじゃねーよ

----------------------------------------------------------
0173デフォルトの名無しさんNGNG
removeがディレクトリを消せるかどうかは環境依存だな
少なくともLSI-Cや古いMS-Cでは消せなかった
0174162NGNG
>>168
じゃ,その可能性も考慮してboostで.
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
int main () {
boost::filesystem::path dir ("hoge");
boost::filesystem::remove (dir);
return 0;
}
0175デフォルトの名無しさんNGNG
>>158
Windowsならwinodws.hのRemoveDirectory
0176デフォルトの名無しさんNGNG
unixなら、remove()内部で対象がファイルならunlink()、
対象がディレクトリならrmdir()を呼ぶように実装するのが当たり前だろ?
0177デフォルトの名無しさんNGNG
>>158のバカが環境を書いてないからなあ。
0178デフォルトの名無しさんNGNG
>>177
BCCらしい。けどここはBCCスレでもないしWin32APIスレでもないが。
http://pc5.2ch.net/test/read.cgi/tech/1090180012/872-875n
0179デフォルトの名無しさんNGNG
>>177
ばかはおまいだろ、屁理屈野郎
空のフォルダを削除するプログラムを書くのは
環境に依存しないよ
0180デフォルトの名無しさんNGNG
173
0181デフォルトの名無しさんNGNG
>>179
バカ晒しage
0182デフォルトの名無しさんNGNG
>>179
libc5 removeで検索しれ池沼
0183デフォルトの名無しさんNGNG
>>158
環境依存だと判ってるなら環境が何か書けよ。
0184デフォルトの名無しさんNGNG
すいません、教えてください。

#include <stdio.h>

main(void)
{
int i;
char math;


printf("計算したい加算乗除を選択してください。\n足し算:A\n引き算:B\n掛け算:C\n割り算:D\n");
gets(math);
if (math = "a"){
printf("足し算をします。\n");
}
else {
printf("その他の計算を行います。\n");
}


return 0;
}


今はif文のテストとしてメッセージだけを表示されるように組んでます。
何故だか分からないんですけどエラーが出るんです。
どうすればいいのか、どなたか教えていただけませんか?
0185デフォルトの名無しさんNGNG
>エラーが出る
コンパイルが出来ないのか、実行時エラーなのか、エラーメッセージ書け、ヴォケ

>char math;
>gets(math);
getsの引数はchar *型を指定する。gets(&math)にすればコンパイルは通る、が実行時にアボン

>if (math = "a"){
文字列定数"a"はchar *型、char型のmathとは比較できない。
Cで文字列を比較するならstrcmpを使う。

char math[BUFF_SIZE];
とかにすれば、BUFF_SIZE-1文字までの入力なら動く。

どうでもいいが、入力を促すメッセージでは大文字の"A"なのに、
小文字の"a"との比較で良いのか?
0186デフォルトの名無しさんNGNG
>>151
裏画面つくってそこに描画してる…?
つくってるだけで終わってませんよね。

//裏画面Bitmap作製
DWORD *lpBMP;//画素データへのアドレス
HDC hBackDC=CreateCompatibleDC(NULL);
char bmbuf[sizeof(BITMAPINFOHEADER)];
BITMAPINFO &bi=*(BITMAPINFO*)&bmbuf;
BITMAPINFOHEADER &bih=bi.bmiHeader;
ZeroMemory(&bi.bmiHeader,sizeof(BITMAPINFOHEADER));
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biWidth=width;//ウィンドウ幅
bih.biHeight=-height;//ウィンドウ高さ
bih.biPlanes=1;
bih.biBitCount=32;
HBITMAP hBitmap=CreateDIBSection(NULL,(BITMAPINFO*)&bih,DIB_RGB_COLORS,(void**)&lpBMP,0,0);
ZeroMemory(lpBMP,sizeof(DWORD)*width*height);
SelectObject(hBackDC,hBitmap);

//描画は全部裏画面へ
TextOut(hBackDC,x,y,str,lstrlen(str));

//WM_PAINT等の最後では裏画面を表に転送
//hDCは表画面のデバイスコンテキスト
BitBlt(hDC,0,0,width,height,hBackDC,0,0,SRCCOPY);//裏画面→表画面にコピー

転送するのは裏画面ビットマップ全体。
画素データだけならlpBMP〜lpBMP*(DWORD)*width*heightに全部入っている。
0187デフォルトの名無しさんNGNG
>>184
if (math = "a"){
→if (math == "a"){
ってオチですか…?

比較は「==」ね。
0188デフォルトの名無しさんNGNG
ああすまん。リロードしてなかった。
185が大量に突っ込んでました…。
0189デフォルトの名無しさんNGNG
>>185
レスありがとうございます。
エラーは
「error C2664: 'gets' : 1 番目の引数を 'char' から 'char *' に変換できません。 (新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。」
と
「error C2440: '=' : 'char [2]' から 'char' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。」
です。
ちょっと分からないんですけどchar *型って何ですか?

大文字のAと小文字のaは普通に間違えてました。指摘どうも。

>>187
比較ってしたとすると具体的にどんな事をするんですか?
0190デフォルトの名無しさんNGNG
あ、==でなく=は素で見落としてた。

>ちょっと分からないんですけどchar *型って何ですか?
いくら初心者歓迎とはいえ…

char型へのポインタを格納する型。
Cには「文字列型」はないので、charに文字を格納し、
charの配列で文字列を扱う。
0191デフォルトの名無しさんNGNG
>>184
#include <stdio.h>
#include <conio.h>
main(void)
{
int i;
char math;
printf("計算したい加算乗除を選択してください。\n足し算:A\n引き算:B\n掛け算:C\n割り算:D\n");
do {
math = getch();
switch (math) {
case 'A' :
printf("足し算をします。\n");
break;
case 'B' :
printf("引き算をします。\n");
break;
case 'C' :
printf("掛け算をします。\n");
break;
case 'D' :
printf("割り算をします。\n");
break;
}
} while (math != 'A' && math != 'B' && math != 'C' && math != 'D');
return 0;
}
0192デフォルトの名無しさんNGNG
何かハードル高そうですね・・・・
勉強不足だったようです。
出直してきます。
ご迷惑おかけしました。
0193デフォルトの名無しさんNGNG
>>191
作り直していただき、ありがとうございます。
でも、192で書いたとおりです。
すいませんでした。
0194デフォルトの名無しさんNGNG
>加算乗除
引き算の立場は?
0195デフォルトの名無しさんNGNG
>>194
加算で負数を指定させることで対応。
0196デフォルトの名無しさんNGNG
剰余は?
0197151NGNG
>>186
サーバでもクライアントでも、裏から表へBitBltしてます
サーバから送るのは、(void**)&lpBMP 画素データと
HBITMAP hBitmap これでしょうか
↑これが裏画面ビットマップ?
0198デフォルトの名無しさんNGNG
>>197
アドレス渡しても意味無いんだよ、Cからやり直して来い。
送るべきデータは
lpBMP〜(lpBMP+((width+3)&~3)*height)
0199デフォルトの名無しさんNGNG
>>198
-1
0200デフォルトの名無しさんNGNG
C言語勉強してWin32APIつかって簡単なソフト5つほど作ったレベルなんですが、
C++にさっさと移行したほうがいいんでしょうか?Cの一通りの知識は頭に入ってるとは
思います。テクニックはほとんどないですが。
できればCからのC++への移行に最適な参考書を紹介していただければ幸いです。
0201デフォルトの名無しさんNGNG
>>200
とりあえず猫でも読んどけ。
0202デフォルトの名無しさんNGNG
もうしばらくC使ってた方がいいぞ
0203158NGNG
すいません。

<環境>
WindowsXP
BCC5.5
です。

>>159
標準でついてきてないヘッダで、
DLしたサンプルにもついてないヘッダです。

>>178
BCCスレに行こうかと思ったところ、このスレの【環境依存OK】が目に入ったもので。

>>162,>>174,>>175
ありがとうございます。
試してみます。
0204デフォルトの名無しさんNGNG

プログラムをコンパイルしようとしたら、
「インクルードファイルxxx.hをオープンできない」というエラーが発生しました。


A. コマンドラインコンパイラのパスが設定した後、
インクルードファイルやライブラリファイルの場所を指定したBCC32.CFGを作成しなければなりません。
これは、List 4のようなファイルです。

List 4 BCC32の設定(BCC32.CFG)


-IC:\Borland\Bcc55\Include
-LC:\Borland\Bcc55\Lib

コマンドラインコンパイラは、コンパイルが成功すると自動的にリンカ(ILINK32)を呼び出します。
場合によっては、リンカを明示的に呼び出すことがあります。
この場合は、同様にILINK32.CFGファイルを設定してください。
また、BCC32.CFGやILINK32.CFGには、これ以外にもコンパイラやリンカに設定するオプションをあらかじめ指定できます。

このファイルはbinのディレクトリの中に作ればいいんですよね。
普通にテキストファイルじゃダメっすか?
0205デフォルトの名無しさんNGNG
テキストファイルだけど拡張子はcfg
0206デフォルトの名無しさんNGNG
ちゃんとcfgになってますね。

以前にc言語をダウンロードした時にもpathを通すために
path=%path%;c:\progra~1\networ~1\mcafee~1c:\lsic86\binのパスや
ジャバのパス
path=c:\windows;c:windows\command;c:\j2sdk_nb\bin
などをms-dosに書き込んであるのですがそれが影響を及ぼしたりしますかね?
0207デフォルトの名無しさんNGNG
試してから聞け
0208デフォルトの名無しさんNGNG
初心者質問ですまん。
C言語環境で貴様の使っている、リストとかハッシュテーブルとかのライブラリを教えてくれ。
やっぱ、俺様ライブラリなん?
0209デフォルトの名無しさんNGNG
std::list, std::hash_set
0210デフォルトの名無しさんNGNG
>>209
それのどこがCなんだよ
0211デフォルトの名無しさんNGNG
boost
0212デフォルトの名無しさんNGNG
>>211
それのどこがCなんだよ
0213デフォルトの名無しさんNGNG
ABDEFGHIJKLMNOPQRSTUVWXYZ
0214デフォルトの名無しさんNGNG
>>213
Cがない。だからなんだ。
0215デフォルトの名無しさんNGNG
>206
BCC32.CFG.txtだったら殴るぞ。
0216デフォルトの名無しさんNGNG
208-214
なんか和んだ・・・
0217デフォルトの名無しさんNGNG
virtualをつけなくても関数の再定義が出来るのに、どうしてvirtualをつけるんですか?
0218デフォルトの名無しさんNGNG
全部作れ!って事をあらわすためだ
0219デフォルトの名無しさんNGNG
仮想関数にするためです
0220デフォルトの名無しさんNGNG
list<CHoge*> hoge;
list<CHoge*>::iterator p;
って、どういう意味なの?
0221デフォルトの名無しさんNGNG
>>220
list<CHoge*>型のhogeを定義。
list<CHoge*>::iterator型のpを定義。
0222デフォルトの名無しさんNGNG
ごめん、質問の仕方が悪かったです。
CHoge*って、ポインタを使ってるけど、なにか意味あるの?
0223デフォルトの名無しさんNGNG
>>222
色々有るんじゃない?
0224デフォルトの名無しさんNGNG
定数とグローバル変数について教えてください。

C言語でグローバルな定数を書く場合、ヘッダファイルに#defineや
enumで定義するのが普通かと思います。
これと同じことをconstを使ってやりたいのですが、単純に#defineのように
書くとリンクエラーになります。
こういった場合、どのようにするのが定石でしょうか?

お願いします。
0225224NGNG
すいません、解決しました。
もうちょっと調べてから書き込むべきでした。
お騒がせしてすいません。(でもまだ誰もみてないよな・・・)
0226デフォルトの名無しさんNGNG
見てないよ。
0227デフォルトの名無しさんNGNG
>>217
ポリモフィズムを実現するため。
関数オーバーロードでは出来ない。
0228デフォルトの名無しさんNGNG
ライドだろ
0229デフォルトの名無しさんNGNG
まぁ、「オーバーロードでは出来ない」だけ抜き出せば確かにそうかもしれん。
レスとしては不適切だが、角度とか。
0230デフォルトの名無しさんNGNG
おれの読んだ本にはメンバ関数にはすべて virtual をつけろと書いてあったので、
その通りにほとんど全メンバ関数につけている。
0231デフォルトの名無しさんNGNG
http://ray.sakura.ne.jp/tips/virtual.html
少なくともprivateメンバにはvirtualは要らない。
0232デフォルトの名無しさんNGNG
>231
俺、わりとfriend classとコンボでprivate virtual使うなぁ。
こいつの為のインターフェイスですよ。って明示的な感じだし。
0233デフォルトの名無しさんNGNG
>>231
理由が
>virtual 宣言した時と比べて 4 byte 節約・・・
かよ。virtualで宣言しているメリットと比較するとあまりに弱いな。
組み込み型でメモリとぼしいなら最初からC使っとけって気もするし。
なんだかねぇ。
0234デフォルトの名無しさんNGNG
>233
あくまで一例だろ。
non virtualの利点が思いつかないなら、C++なんぞやらずにJavaつかっとけ。
0235デフォルトの名無しさんNGNG
>>234
ちょっと読んでみたけど
> virtual キーワードがあるのは、このようにコストを減らせるようにするためです。
> int 型のデータメンバを1つしかもたないようなクラスでは、virtual にした場合、virtual
> にしないのと比べてコストが2倍になります。これはかなり大きな違いです。
アホかと思った。これ読んだ時点でその後読む気なくすなぁ・・
0236デフォルトの名無しさんNGNG
JavaあがりのC++プログラマいわく
なんにも考えないですべてバーチャルにしとけばいいじゃん
0237デフォルトの名無しさんNGNG
すべて Virtual で正解
0238デフォルトの名無しさんNGNG
コンストラクタもかよ
0239デフォルトの名無しさんNGNG
>>236
ぶっちゃけ Palm で開発してたときはそうしたけど
さすがに人に勧めるようなことは言いたくない
0240デフォルトの名無しさんNGNG
SDLのようにマルチプラットフォーム対応のプログラムを
自作するにはどうすればいんですか?
0241デフォルトの名無しさんNGNG
>>240
対応するプラットフォームについて熟知すべし
0242デフォルトの名無しさんNGNG
c++初心者なんですが、
char *operator<<(bookmark obj1){
return obj1.title;
}
呼び出し時に cout << obj; (上のクラスオブジェクト)
という風に使います。

警告:関数の戻り値が自動変数のポインタ/参照となっています。
(return obj1.title;)
エラー:不当なオペランドです。
(cout << obj;)
って、出ます。お教えお願いします。
0243デフォルトの名無しさんNGNG
(std::ostream& os, bookmark obj1) {
return os << obj1.title;
}
じゃないのか
0244デフォルトの名無しさんNGNG
std::ostream &operator<<(std::ostream &os, bookmark obj1) {
return os << obj1.title;
}
0245デフォルトの名無しさんNGNG
virtualって、奥が深いんだな
0246デフォルトの名無しさんNGNG
>>243 >>244
勘違いしてました。stdクラスではない方のクラス内で定義しよう
としてた。おかげで、思うように動きました。
ありがとうございました。

メンバtitleはプライベートなので
そのままでは使えないのでメソッドでchar*を返すようにして
使ったんですけど、なんか回りくどいような気がするんですが、
どうなんでしょう。
これしか方法無いなら、無視して下さい。m(_ _)m
0247デフォルトの名無しさんNGNG
bookmark側をprivateにしたければこうするしかない。
char* bookmark::get_title(){return this->title;}
std::ostream& operator<<(std::ostream &os, bookmark& obj1){return os << obj1.get_title();}
0248デフォルトの名無しさんNGNG
friend関数にすればいいじゃん
0249デフォルトの名無しさんNGNG
なるほど。。。friend関数ですか。
C++って奥が深いんですね。(泣)
ていうか、全然分かって無い事が発覚。一からやります。
レスありがとう。
0250デフォルトの名無しさんNGNG
friendみたいに中を荒らされるのはやだな〜
0251デフォルトの名無しさんNGNG
>>250
自称友達ほど性質の悪いものはないよな。
0252デフォルトの名無しさんNGNG
>>250
メンバ関数という形をとっていないだけで、クラスbookmarkのインターフェースの一部なのだから、
privateなメンバにアクセスできても不自然ではない。

>>251
自分が相手をfriendと認めるだけであって、自称友達という表現は当てはまらない。
■ このスレッドは過去ログ倉庫に格納されています