スレを勃てるまでもな ..
75:デフォルトの名無しさん
07/01/09 16:57:09
>>73
0で始まる数値は8進リテラルと決められているからです。
従って、10進リテラルで0を表現することは(事実上)できません。
76:デフォルトの名無しさん
07/01/09 20:00:12
じゃ1-1で
77:デフォルトの名無しさん
07/01/10 04:38:30
>>73
0でも
00でも
0x0でも
意味は一緒だから気にすんな
78:デフォルトの名無しさん
07/01/10 05:34:56
0AUと0nmは同じ長さ
79:デフォルトの名無しさん
07/01/10 07:32:12
>>77
意味は違います。同じように使えるだけです。
>>78
工学屋から言わせれば、精度が違う。
80:デフォルトの名無しさん
07/01/10 17:57:07
int _tmain()
{
for(int n=0;n<=10;n++){
for(int i=0;i<=10;i++){
cout<<n<<" "<<i<<endl;}
cout<<n<<" "<<i<<endl;}
}
とするとiが0から11まで出力されます。10じゃないのかな?なんでだろ。
81:デフォルトの名無しさん
07/01/10 18:00:31
あげわすれました。よろしくお願いいたします。
82:デフォルトの名無しさん
07/01/10 18:02:24
>>80
<=以下
<未満
83:デフォルトの名無しさん
07/01/10 18:09:20
それは大丈夫です。>80式を動かすとnについては0-10までなのですがiが0-11となってしまいます。
for構文だからi=10のときはi<=10を満たすので「cout<<n<<" "<<i<<endl;」を実行しこのときiは10となります。
その次にiを++するのでi=11となりi<=10を満たさなくなるので、i=11が出力されるはずがないと思ったのです。
なんでなんでしょうか。
84:デフォルトの名無しさん
07/01/10 18:11:51
n i
0 1
0 2
・・・
0 9
0 10
0 11
・・・
10 1
・・・
10 10
10 11
となります。変だと思うのです。
85:デフォルトの名無しさん
07/01/10 18:19:16
>>84
2行目の
>cout<<n<<" "<<i<<endl;}
が余計だろう。ここのi は既に内側のforのスコープから外れてるぞ。
86:デフォルトの名無しさん
07/01/10 18:21:13
>>80式を動かすとnについては0-10までなのですがiが0-11となってしまいます。
>>84の実行例はiは1-11になってるように見えるが?
>>80で書いたコードと>>84で実行してるコードは違うだろ?
87:デフォルトの名無しさん
07/01/10 18:31:57
[完成]
int _tmain()
{
for(n=0;n<=10;n++){
for(i=0;i<=10;i++){
cout<<n<<" "<<i<<endl;}
//cout<<n<<" "<<endl;
}
}
[原因]
指摘をもとに2行目を削除したところ正しく出力されました。ありがとうございました。
[謝辞]
>85
ご指摘の通りでした。2行目が必要だと思っていましたが、実際には不要なものだったのですね。
>86
申し訳ないです。慌てていて>84でiが0の場合が抜けています。
みなさま迅速なご指導ありがとうございました。これで数時間悩んでいてほとほと困っていましたが
解決することが出来ました。
[結果]
n i
0 0
・・・
0 9
0 10
・・・
10 1
・・・
10 10
88:デフォルトの名無しさん
07/01/11 19:05:47
Cのprintfにて文字色を変えて表示させたいのですが
\033[31m のような指定では無く
RGB指定で細かくして表示させたいのですが
そのようなことは可能でしょうか?
89:デフォルトの名無しさん
07/01/11 19:38:08
世の中そういうことができる環境があるかもしれない。
或いは自分で作ればそういうことだってできるだろう。
90:よろおね
07/01/11 22:27:20
知人からソースを貰いました。
コンパイルしようとしたら
$ gcc main.c
main.c:6:19: stdio.h: No such file or directory
main.c:7:20: string.h: No such file or directory
main.c:8:20: stdlib.h: No such file or directory
となりました。
「stdio.h, string.h stdlib.h も寄越せ ゴルラ!」と言って一週間。
未だに貰えません。
どうしたらいいでしょう?
91:デフォルトの名無しさん
07/01/11 23:03:48
明らかにあなたのビルド環境が異常です
92:デフォルトの名無しさん
07/01/11 23:07:36
>>90
stdio.h, string.h stdlib.hは知人から貰うようなものじゃない。
コンパイラをダウンロード・インストールすれば付いてくるもの。
環境さえまともに整えられないのか?
93:デフォルトの名無しさん
07/01/11 23:14:02
知人も在る場所知らない希瓦斯
94:デフォルトの名無しさん
07/01/11 23:16:11
ワロス.なんでgccがあってstdio.hがねーんだよ(w
ホラヨ(w
つ URLリンク(ftp.gnu.org)
95:デフォルトの名無しさん
07/01/11 23:18:11
どうせ
#include "stdio.h"
とか書いちゃってるオチだろ。
96:デフォルトの名無しさん
07/01/11 23:20:47
>>95
その場合も、見付からなければ<stdio.h>と書いたのと同じ方法でヘッダを探すことになっており、
gccもそれに則っているから問題ない。
97:デフォルトの名無しさん
07/01/12 11:35:58
↓このあと、>95 の「釣れた」宣言
98:偽95
07/01/12 15:21:42
Fish On!!
かかったかかったーー!!
ん?あっれぇ〜
根掛かりだ〜
99:デフォルトの名無しさん
07/01/12 16:08:14
わらたw
100:デフォルトの名無しさん
07/01/12 16:58:50
>>98=99
かわいそす
101:デフォルトの名無しさん
07/01/13 14:28:22
Microsoft Visual C++ 2005
で.cppのファイル開いてもビルトがでない。
どーやってコンパイルすればいいの!!
102:デフォルトの名無しさん
07/01/13 16:07:57
‖
___ ‖
/ `ヽ‖
,:' 、ゑ
,' ; i 八、
|,! 、 ,! | ,' ,〃ヽ!;、
|!| l川 l リへ'==二二ト、
リ川 !| i′ ゙、 ', ',
lルl ||,レ′ ヽ ,ノ ,〉
|川'、 ,,.,.r'" ,,ン゙
`T" ! ,/ '.ノ,/|
/ ,!´ !゙ヾ{ |
/ ,' i ゙ ! ,l゙
,r‐'ヽ-、! ', l|
{ `ヽ ! 「゙フ
,>┬―/ ; i,`{
/ /リ川' ', ゙、
/ ,/ ゙、 ゙、
ノ / ', `、
\_/ ; ゙、ヽ、
l__ ! ___〕 ,、l
 ̄`‐┬―r┬‐r'´ `'‐'′
| .! | |
| | .| |
103:偽95
07/01/13 16:09:17
新規作成→新しいプロジェクト→特にソリューションディレクトリが必要なければチェック消す
→プロジェクト名(好きな名前で結構)[OKを押せば勝手に指定した場所の所にプロジェクトフォルダが出来る]
→OKを押して次を押す→windowsアプリケーションじゃないならプリコンパイル済みヘッダーのチェックを消す
→コンソールアプリケーションチェック、空のプロジェクトチェック、そんで完了押す
→左のソースファイルフォルダ右クリック新しい項目追加
→C++ファイルを選んで名前を付けて追加(C言語なら拡張子を.cにする)
→ソース書いてコンパイルしてビルドしてデバッグなしで開始(デバッグするならデバッグで)
104:デフォルトの名無しさん
07/01/13 21:06:16
C++で文字列の先頭から、途中までの文字列が一致するか否かを判定する関数は
ありますか?
EX:
比較文字列 2ch
比較対象文字列(一致)
2ch close
比較対象文字列(不一致)
3ch open
こんな感じで判定できるような関数なのですが・・・・・?
Windows2000
VS2005 SDK
105:デフォルトの名無しさん
07/01/13 22:03:36
string
106:デフォルトの名無しさん
07/01/13 22:52:02
不可解なエラーに悩まされています。
原因はどの辺りにあるかわかりますか?
たとえば、グローバルで定義したint a、int bがあるとして、
プログラム中でa++したときに、なぜかbも一緒に++されてしまう。
aをaaaに変更してみたりその他の関係のない変数の変数名を変更してみたり、
int a=0;と定義するとエラーが出なくなることもある。
しばらくコーディングを進めると今度は違う変数同士が干渉し始める。
どの辺りに起因して同じ領域に違う変数が割り当てられてしまうのか、見当もつきません。
WinXP
gcc(cygwin)
107:デフォルトの名無しさん
07/01/13 23:27:22
>>106
gccなんてクソコンパイラ使ってるからだよ。m9(^Д^) プギャー
108:デフォルトの名無しさん
07/01/13 23:36:02
>>106
m9(^Д^) プギャー
109:デフォルトの名無しさん
07/01/13 23:37:55
>>106
よくわからんで作ってることが原因だな
110:106
07/01/13 23:48:16
>>109
わかりました。基本から出直してきます。
ご返答ありがとうございました。
111:デフォルトの名無しさん
07/01/14 00:00:46
&b(a);
とか?
112:デフォルトの名無しさん
07/01/14 13:25:42
doubleの要素型で、要素数が5の配列の全要素に0.0を代入して表示するプログラムが分かりません。教えて下さい。C++です。
113:デフォルトの名無しさん
07/01/14 14:06:06
#include <iostream>
int main()
{
double d[5] = {0.0};
for(int i = 0; i < 5; i++)
std::cout << i << " : " << d[i] << std::endl;
return 0;
}
114:デフォルトの名無しさん
07/01/14 15:00:16
>>113
ありがとうございます!けど実行すると、0が表示されてしまいます....
115:デフォルトの名無しさん
07/01/14 15:06:08
確認のために0を表示するように書かれているからだ。
116:デフォルトの名無しさん
07/01/14 15:06:50
0というより、0になった配列の各要素と言うべきだな。
117:デフォルトの名無しさん
07/01/14 16:12:23
0 じゃなくて 0.0 を表示したいのではないかと esp
118:デフォルトの名無しさん
07/01/14 16:15:03
ほれ
#include <stdio.h>
int main()
{
double d[5] = {0.0};
for(int i = 0; i < 5; i++){
printf("%.1lf\n", d);
}
return 0;
}
119:デフォルトの名無しさん
07/01/14 16:52:50
>>117
そうです。
>>118
すいません。それはC++の場合はどうすればいいんでしょうか?
120:デフォルトの名無しさん
07/01/14 16:57:39
#include <cstdio>
int main()
{
double d[5] = {0.0};
for(int i = 0; i < 5; i++){
printf("%.1lf\n", d);
}
return 0;
}
121:デフォルトの名無しさん
07/01/14 16:58:12
>>120
ありがとうございます。
122:デフォルトの名無しさん
07/01/14 17:08:17
d[i]
123:デフォルトの名無しさん
07/01/14 17:44:48
Cプラプラで0.0から1.0まで0.001おきに、その値と、その値の2乗を表示するプログラムって、どう作ればいいんですか?
124:デフォルトの名無しさん
07/01/14 17:48:56
>>123
まずはC++のコンパイラを入手し、お前が使ってるPCにインストールする。
125:デフォルトの名無しさん
07/01/14 20:08:02
C++なら_asmが使えるからアセンブリで書いてやろうと思ったけどやめた
126:デフォルトの名無しさん
07/01/14 22:47:07
int data[10]={0};//dataの中身を全部0で初期化
これをクラスで記述する方法ってあるんでしょうか
struct a{
int data[10];
a():??{}
};
127:デフォルトの名無しさん
07/01/14 23:44:50
a() : data() {}でできない?
できないならおとなしく、コンストラクタのブロックの中でstd::fillでもするしかないな。
128:デフォルトの名無しさん
07/01/15 00:37:06
>>127
出来ました!こんな書き方があったとは
ありがとう
129:デフォルトの名無しさん
07/01/15 04:20:32
画像のピクセルサイズを取得したいのですが
どうすれば取得できますか?
130:デフォルトの名無しさん
07/01/15 09:05:21
画像ファイルの構造を知る
131:デフォルトの名無しさん
07/01/15 15:38:57
男ならwaveだろうがbmpだろうが黙ってバイナリfstream
132:デフォルトの名無しさん
07/01/15 18:29:29
>>129
BITMAPINFOを足がかりに
133:Cはできた(過去形)人
07/01/15 18:29:34
BorandC++を使ってるんですが・・・ <iostream>ファイルをオープンできません とでてコンパイルできません・・・ いったいどうすれば・・・
134:デフォルトの名無しさん
07/01/15 18:34:02
>>133
お前じゃどうしようもないから諦めろ
135:デフォルトの名無しさん
07/01/15 18:46:29
>>133
普通にググったら見落としに気づくかもよ。
136:デフォルトの名無しさん
07/01/15 18:54:30
分割コンパイルしたオブジェクトファイルをmain.oも含めて静的ライブラリに
まとめた場合、一般にそのライブラリのみで実行ファイルをビルドすることは
できるのでしょうか?
GCCだとできたのですがVCやBCCだとどうなんでしょう?
libfoo.aがmain.o, hoge.oで構成されている場合、GCCの例だと
gcc -o exefile libfoo.a
でexefileという実行形式を作成できました。
137:デフォルトの名無しさん
07/01/15 18:57:51
256*256の二次元配列を作りたいのですが、実行するとStack overflowとでてしまいます。
どうにか回避する方法はないでしょうか?
138:デフォルトの名無しさん
07/01/15 19:06:23
>>137
ヒープに割り当てる
139:デフォルトの名無しさん
07/01/15 19:10:57
mainを含んだ静的ライブラリってのは、
Win32のスクリーンセーバライブラリがそんな感じだな。
140:137
07/01/15 19:36:29
>>138
すみません。
ヒープに割り当てる方法を教えてください。
141:136
07/01/15 19:39:26
今vc8で試してみたのですができませんでした。
具体的には
cl /EHsc /c main.cpp lib.cpp
lib /out:library.lib main.obj lib.obj
cl /Feout library.lib
out.objが開けないとエラーがでてしまいます。
142:デフォルトの名無しさん
07/01/15 19:46:55
>>140
ヒープに割り当てるというのはmalloc(Cの場合)やnew(C++)などで
動的にメモリを確保することです。
あとは調べればわかるかと思います。
143:デフォルトの名無しさん
07/01/15 21:39:29
>>141
できたぞ。
cl /EHsc /Zl /c test.cpp
lib /out:hoge.lib test.obj
link /machine:x86 /entry:mainCRTStartup /out:HOGE.EXE msvcrt.lib hoge.lib
/entryの代わりに/subsystem:consoleでもうまくいった。
またcl経由でリンカを呼び出してもできる。
cl /MD hoge.lib /link msvcrt.lib /machine:x86 /subsystem:console
いずれにしてもLNK4001(オブジェクトファイルがない)という警告が出る。
144:デフォルトの名無しさん
07/01/16 15:11:25
URLリンク(home.hiroshima-u.ac.jp)
どこでなにやってるか全然ワカランので、中盤以降に説明つけてください!
あともう少し素人が作ったっぽくなりませんか?
145:デフォルトの名無しさん
07/01/16 16:04:06
>>144
それだけ素人丸出しなら充分だと思うが。
146:デフォルトの名無しさん
07/01/16 22:33:51
Windows上で動くプログラムには仮想メモリが割り当てられてて
プログラムからは仮想メモリしか見えないんだよね?
じゃあメモリエディタってどうやってんの?
147:デフォルトの名無しさん
07/01/16 22:50:39
適切な権限さえあればよそのプロセスのメモリだって読み書きできる(真っ先に思い浮かぶのはデバッグ用途)。
大抵は権限の設定なんてやっていないから、同じユーザのプロセスならだいたい読み書きできると思っていい。
148:デフォルトの名無しさん
07/01/17 00:14:54
Windowsカーネルは全部の仮想メモリを知ってるから、
API叩いて教えてもらうんだよ。
149:デフォルトの名無しさん
07/01/17 11:27:50
実際に物理的なメモリを書き換えているとは限らない
ひょっとするとあなたの書き換えた場所はディスク上の一部かも知れない
150:デフォルトの名無しさん
07/01/21 00:10:28
質問なんですが、C++の問題集でお勧めなのはないでしょうか?
参考にしたいのでお願いします。
151:デフォルトの名無しさん
07/01/21 03:22:51
>>150
C/C++問題集スレ
スレリンク(tech板)
152:デフォルトの名無しさん
07/01/21 13:53:15
>>151
ワロタ
153:デフォルトの名無しさん
07/01/22 12:08:48
Cの経験が少しあってC++をはじめた者です。
憂鬱なプログラマのためのオブジェクト指向開発講座(第2部第5章p116)で、
「コンストラクタを使って、定数メンバの初期化を行うことができます」
と書いてありました。定数の初期化って、定数はあらかじめ
定義されているものだと思うんですけど、
どういうことでしょう?
154:デフォルトの名無しさん
07/01/22 12:21:08
定数メンバと定数は違うだろ
155:デフォルトの名無しさん
07/01/22 15:25:31
static const double a=1;
じゃだめなのですか?
156:デフォルトの名無しさん
07/01/22 16:04:03
153は非静的メンバの話だと思う。
157:デフォルトの名無しさん
07/01/22 17:09:46
>>154
>定数メンバと定数は違うだろ
定数って
const int a;
とかですか?
158:デフォルトの名無しさん
07/01/22 17:29:36
憂鬱本↓
メンバ初期化の方法はLIST6のように考えるのが普通でしょう.
確かにこのように書くことは可能です.・・・しかし,これは進められる書き方ではありません.なぜならば,これでは定数のデータメンバを初期化することができないからです.
クラスのメンバデータには定数も使用することができます.その初期化を行うのも当然コンストラクタということになるでしょう.しかし,コンストラクタとはいえ,やはり関数です.その中で定数を書き換えることはやはりできません.
さてそれでは,別の方法で定数メンバを初期化することは出来るのでしょうか.そのような特別な方法が用意されているのでしょうか.
これはそのような方法が存在します.C++では,コンストラクタがメンバを初期化するために新しい構文が設けられています.メンバの初期化はLIST7のように行います.
159:デフォルトの名無しさん
07/01/22 17:31:59
LIST6:データメンバの初期化
Person :: Person () // コンストラクタの実装部
{
age = 0 ; // 年齢の初期化
name = NULL ; // ポインタの初期化
} // しかしこの方法は薦められない!
LIST7:コンストラクタでのメンバ初期化
Person :: Person ()
: age ( 0 ) , name ( NULL ) // 正しい方法
{
// 何もしない
}
160:デフォルトの名無しさん
07/01/22 18:25:26
_, ._
(;゚ Д゚) …?
161:デフォルトの名無しさん
07/01/22 18:38:24
新版も出たことだし、Effective C++ くらい買いなさい。
162:デフォルトの名無しさん
07/01/22 19:07:38
>>158
>これはそのような方法が存在します
日本語でおk
163:デフォルトの名無しさん
07/01/24 12:09:24
(これ、Visual C++のスレで質問するべきなのかもしれませんが)
標準C++というのでしょうか、windowsコンソールアプリケーションの
文法で、Visual C++のよなwindowsプログラミング(ファイル[メニュー]や
ボタンを付けたいだけですが)をすることってできるでしょうか?
やはりそれはVisual C++でしかできないのでしょうか?
環境はVisual C++ 2005 Express Edition使っています。
164:デフォルトの名無しさん
07/01/24 12:26:27
>>163
Visualという単語で勘違いしたのかな?VC++でコンソールアプリも書けます。
VC++でコンソールアプリを書いてもWindowsアプリを書いても、VC++の文法は同じです。
Windowsアプリの開発環境はVC++だけではありません。VB、Delphi等々色々あります。
165:デフォルトの名無しさん
07/01/24 12:53:02
>>164
返信感謝します。
(私があまり理解していないので、言葉がうまく見つかりません)
普通(?)のC++(コンソールアプリ)は、やったことがあるんですが、
windowsアプリケーションのソースを見たところ、
“ハンドル”という言葉が出てきたりして、
私が今まで勉強したC++と少し違うと思いました。
文字列に関しても、宣言が下のように違うようです。
string word @
↓
string^ word; A
winwosアプリをする場合は、新たにAのような文法を勉強しなければ
ならないんですよね?
166:デフォルトの名無しさん
07/01/24 15:42:41
ないない
167:デフォルトの名無しさん
07/01/24 16:20:59
ルンゲ・クッタ法を用いてX-Y軸上に楕円運動の軌道を描く際の、各点においてのX軸Y軸方向への速度をV,Uとして時間T毎にファイルに書き込みたいのですが、どういった書き方ならば綺麗に描けますか?
168:デフォルトの名無しさん
07/01/24 16:28:14
>>166
どっちでしか?
169:デフォルトの名無しさん
07/01/24 17:54:33
>>165
「string^ word;」がエラーにならないとはちょっと思えない。
“ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。
それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。
まぁ、まずはWinアプリの入門書か解説ページを読んで。
170:165
07/01/24 18:11:36
返信ありがとうございました。
>“ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。
>それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。
前者だと思います。
↓のように使用されていて、
文字列型のハンドル、オブジェクト方のハンドルがあると書いてありました。
private: System::Void buttonAdd_Click(System::Object^ sender, System::EventArgs^ e) {
Debug::WriteLine("追加ボタンをクリックしました");
// 品名、分類、金額を取得する
String^ name = textName->Text;
String^ kind = comboKind->Text;
String^ money = textMoney->Text;
String^ out;
out = String::Format("品名:{0} 分類:{1} 金額:{2}", name, kind, money );
Debug::WriteLine( out );
}
>まぁ、まずはWinアプリの入門書か解説ページを読んで。
普通のC++を知っているだけでは、windowsプログラミングは無理のようですね。
じっくりやってみようと思います。
171:デフォルトの名無しさん
07/01/24 19:03:37
>>170
あぁぁ、C++/CLIですね。だと文法も拡張されてるそうです。
新しいことをあまり知らないくせにレスつけました。すいません。
でもWinアプリを書くのにC++/CLIじゃないとダメってことはないですよ。
172:デフォルトの名無しさん
07/01/24 20:38:23
>>151
とりあえず、参考にしてみます。
173:デフォルトの名無しさん
07/01/24 22:12:01
>>170
そのハンドルは169の言っているものとは違う。
171も言っているが、それは.NET Frameworkを使って動くプログラムを書くために作られたC++/CLIという言語のプログラム。
普通のCもしくはC++を使ったWindowsプログラムはまた別物。
174:デフォルトの名無しさん
07/01/24 22:38:23
>>171,173
指摘していただき感謝します。
C++/CLIは別なんですね。知りませんでした。
私はC++/CLIでない普通のWindowsプログラミングをしたいのですが、
その場合は、普通のC++と同じ文法でやれるのでしょうか?
VC++2005Express使っているんですけど、
その場合、プロジェクトの作成の仕方は、
[ファイル]→[新規作成]→[プロジェクト]
から、[新しいプロジェクト]ダイアログで、
[プロジェクトの種類]で、[win32]で選ぶのかと思うんですが、
この時[テンプレート]で選択できるのが[win32コンソールアプリケーション]
だけになってしまいます。
やり方が違うと思うんですが、
教えていただけますか?
175:デフォルトの名無しさん
07/01/24 23:13:41
>>174
VC++2005ExpressEditionでwin32アプリケーションを作るには
URLリンク(www.microsoft.com)
↑で環境をもうちょっと追加しなければならない。
ちなみに
.NETアプリってのはCLRとか書いてるやつね
win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、
window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。
URLリンク(www.kumei.ne.jp)
↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。
VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変
WindowsSDKでの開発がめんどくさいから
MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。
.NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。
176:174
07/01/24 23:45:24
>>175
丁寧な説明ありがとうございます。
>VC++2005ExpressEditionでwin32アプリケーションを作るには
>URLリンク(www.microsoft.com)
>↑で環境をもうちょっと追加しなければならない。
早速入れました。
>win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、
>window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。
>URLリンク(www.kumei.ne.jp)
>↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。
>VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変
>
やってみようと思います。
>WindowsSDKでの開発がめんどくさいから
>MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。
>.NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。
>
わかりました。
CLRも考えようかと思います。
177:デフォルトの名無しさん
07/01/25 00:46:29
質問です、以下の構造体があったとします↓
struct Test{
int nMem;
char strMem[20];
};
上記の構造体に、関数をひとつ追加します。
struct Test{
int nMem;
char strMem[20];
void Clear(){
nMem = 0;
strcpy(strMem, "");
}
};
そして両者のsizeofをとってみたのですが、両者とも24バイトとなりメンバ関数によるサイズの増大が見られません。
これは、コンパイラがTest::Clear()の呼び出しを該当するメモリアドレスに置換しているからなのでしょうか?
多分そうだと思うのですが、参考となるようなものが無く………詳しい方、宜しくお願い致します。
178:177
07/01/25 00:47:31
追記です、実行環境はVS2003、VS2005、BCCです。
179:デフォルトの名無しさん
07/01/25 02:54:53
>>177
メンバ関数も、機械語のレベルにすれば単なる関数であることに変わりはない。
Cで擬似的に書けばこんな感じになる。
struct Test {
int nMem;
char strMem[20];
};
void Test_Clear(Test* this) {
nMem = 0;
strcpy(strMem, "");
}
180:デフォルトの名無しさん
07/01/25 11:58:29
C++の例外の使い方を解説した参考書で、オススメのものを教えてください。
文法自体の解説ではなく、使いこなしのテクニックなどについてです。
181:デフォルトの名無しさん
07/01/26 01:00:56
>>180
例外の落とし穴的なことなら Exceptional C++ にあるよ。
# もし持ってないんだったら C++ 使いとして C++ in-Depth Series は
# 揃えておくことをオススメするですよ。
182:デフォルトの名無しさん
07/01/26 14:17:33
>>181
ありがとうございます。
洋書には、知っておくべきノウハウの本があるのに、
和書には、言語仕様の解説本しかないんですよね。
洋書で足りてるから書く必要がないのかもしれないけど。
183:177
07/01/26 15:34:18
遅れてしまいました、179さんありがとうございます。
184:デフォルトの名無しさん
07/01/28 03:25:47
メインで作ったポインタをオリジナル関数内で配列領域を宣言するときはどう関数を受け渡せばいいのでしょうか。
void o(int **mem)
{
int i;
mem=(int **)calloc(10, sizeof(int));
for(i=0; i<10; i++)
mem[i]=(int **)calloc(10, sizeof(int));
}
int main()
{
int **mem;
o( );//この部分
}
185:デフォルトの名無しさん
07/01/28 04:06:30
>>184
void o(int ***mem)
{
int i;
*mem=(int **)calloc(10, sizeof(int));
for(i=0; i<10; i++)
(*mem)[i]=(int **)calloc(10, sizeof(int));
}
int main()
{
int **mem;
o(&mem);//この部分
}
186:デフォルトの名無しさん
07/01/28 04:11:30
>>185
それはやったのですが、
o内で数値を代入して、
メイン側でその数値を使おうとすると反映されていないみたいでエラーが・・・。
187:デフォルトの名無しさん
07/01/28 04:15:23
>>185
後コンパイル時に引数が異なるというエラーが。
間接参照のレベルが 'int ***' と 'int ****__w64 ' で異なっています。
仮引数および実引数と異なります。
188:デフォルトの名無しさん
07/01/28 04:16:17
>>186
だったらここだろ
void o(int ***mem)
{
int i;
*mem=(int **)calloc(10, sizeof(int *));
for(i=0; i<10; i++)
(*mem)[i]=(int *)calloc(10, sizeof(int));
}
ちなみにどんなエラーが出たのか明記しないとわからん
189:デフォルトの名無しさん
07/01/28 04:17:31
>>187
メインで int ***mem; とやってるんじゃないか?
190:デフォルトの名無しさん
07/01/28 04:22:36
>>188
完走しました。
ありがとうございました。
>>189
それはなかったです。
191:デフォルトの名無しさん
07/01/28 06:52:30
フリーウェアで、
クラス図を作れるものってありますか?
192:デフォルトの名無しさん
07/01/28 08:24:55
C/C++の質問しろよ
umlmemo
193:デフォルトの名無しさん
07/01/28 08:29:20
doxygen
194:デフォルトの名無しさん
07/01/28 09:07:10
JUDE Community
195:デフォルトの名無しさん
07/01/28 11:33:04
>>192-194
ありがとうございました。
>C/C++の質問しろよ
はい、すみません。
196:デフォルトの名無しさん
07/01/28 17:09:42
void qsort ( void* base , size_t nmemb , size_t size, int(*compar)(const void *, const void *) )
↑のを自作で作りたいのですが、誰かサンプルを作っていただけないでしょうか?
初心者でスマソorz
197:デフォルトの名無しさん
07/01/28 17:14:38
URLリンク(www.google.co.jp)
好きなのを持ってけ
198:デフォルトの名無しさん
07/01/28 17:20:36
C++でゲーム制作プログラミング勉強しようと思ってるのですが
おススメの参考書を教えていただきたいです。
本屋に行ったのですが、何を買えばいいかわからずに退散してきましたorz
要望を挙げれば実際にゲーム制作しながら学べるような参考書。
RPGではなくアクションゲーに重きを置いた参考書を望んでいます。
プログラミング経験はJAVAを2年ほど、Perlを授業でかじった程度です。
よろしくお願いします
199:デフォルトの名無しさん
07/01/28 17:21:54
>>197
どれが自作のやつかよく分かんないですorz
ほんと無知でスマソ
200:デフォルトの名無しさん
07/01/28 17:40:28
ちみの云う「自作」の概念がよく分からないな。
チミが作ったわけじゃねーから、みんな他作だろう?
201:デフォルトの名無しさん
07/01/28 17:47:16
ワロタ
202:デフォルトの名無しさん
07/01/28 18:08:28
>>184
なんか見ていてクラクラしてくるコードだなぁ。
サイズが固定なら配列を使ったほうがいいんじゃないか。
>>196
正しい日本語で。
qsortの使用例 と qsortの実装例 のどっちが欲しいの?
>>198
問題をしっかり切り分けよう。
ざっと乱暴に分けただけでも、
□ C++
□ OSのAPIのうち、ゲームで使うものについて
□ ゲーム特有のアルゴリズム
という3つに分けられる。
それぞれ独立した話なので、それぞれ別々に学んだほうがいい。
このスレで質問すべきなのは、
「Javaをある程度やった人にオススメのC++の教科書を教えてください」
ということだよ。
で、Javaを2年もやったのであれば、入門書的なのは無駄が多い。
まずは、↓のような簡単なものでいいので、CとC++の文法の概要を、軽く読む。
URLリンク(www5c.biglobe.ne.jp)
URLリンク(www5c.biglobe.ne.jp)
その上で、C++の有名な参考書群を読めば習得は速い。
203:196
07/01/28 18:21:24
>>202
すみません。実装例の方です
204:198
07/01/28 21:01:49
>>202
色々と詳しく教えていただきありがとうございます
とりあえず教えていただいたサイトを見て基本的な所を理解してから
参考書を購入して勉強しようと思います。
ありがとうございました
205:デフォルトの名無しさん
07/01/28 21:02:45
>>203
GNUのglibcとか、
マイクロソフトならVC++に付属のCランタイムのソースコードとか。
206:デフォルトの名無しさん
07/01/28 21:23:48
#include "DxLib.h"
struct CharaData{
int x;
int y;
int mae,hidari,migi,tama;
};
struct CharaData jikidata;
int jikinomuki=0;
int statusboard=LoadGraph("StatusBoard.png");
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);// ウインドウモードに変更
SetGraphMode(600,480,16);//ウィンドウの大きさ
if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化
WaitKey();
DxLib_End();//DXライブラリ終了
return(0);//終了
}
エラーがでてないのにウィンドウが表示されません。
PCの動作が重くなっているので実行はされてると思うのですが・・・
誰かわかる人いましたら解決策を教えてください OTL
207:デフォルトの名無しさん
07/01/28 23:37:23
ChangeWindowMode(TRUE);
SetGraphMode(600,480,16);
はDXライブラリの関数だろ?だったら
if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化
の後に書くんじゃないか?
順序立てて考えて問題箇所を洗い出せ
208:デフォルトの名無しさん
07/01/28 23:41:39
int statusboard=LoadGraph("StatusBoard.png");
これはヤバいんじゃないか?
WinMainよりも前に実行されるぞ。
209:デフォルトの名無しさん
07/01/29 08:50:37
Choge hoge = new Choge();
と
Choge hoge;
は何が違うんでしょうか?
ヒープ領域とスタック領域の違いでしょうか?
どう使い分けたらいいでしょうか?
210:デフォルトの名無しさん
07/01/29 10:55:12
>>209
前者はdeleteする必要がある。
そのクラスが巨大でないのなら、後者で充分。
巨大であるとかクラスの特性上必要があるとかで前者を使うのなら、auto_ptrの使用を検討したほうがよりよい。
211:デフォルトの名無しさん
07/01/29 12:10:01
Choge* hoge = new Choge();
ではなくて
Choge hoge = new Choge();
なのであれば、それはメモリリークしている可能性があるよ。
Choge hoge ;
Choge* p = new Choge() ;
hoge = p ;
ただし、Choge::operator=(const Choge* p) が存在する、気持ち悪いクラスの場合だが。
212:デフォルトの名無しさん
07/01/29 13:14:13
>>211
>Choge hoge = new Choge();
>
>なのであれば、それはメモリリークしている可能性があるよ。
そもそもコンパイル通らないんじゃないか?
213:デフォルトの名無しさん
07/01/29 15:27:32
Cについて質問です。
double型変数をfprintfで小数点以下の有効数字全てを表示したいのですが、
どのようにすればよいでしょうか。
今は%.20leとか適当な数字で表示させています。
できれば%lfの形式で表示したいのですが。
214:デフォルトの名無しさん
07/01/29 16:30:09
>>213
%.20gじゃダメ? 値が適当な範囲ならf形式で出るけど。
215:デフォルトの名無しさん
07/01/29 17:53:53
#define isupper(c) ( (c) >= 'A' && (c) <= 'Z' )
↑これ、パラメータが2箇所で評価しているんですけど、
問題ですか?普通に使えるような気がボクはするんですが...
216:デフォルトの名無しさん
07/01/29 18:05:21
>>215
ASCIIのようにアルファベットがリニアに並んでいる環境なら使えますね。
評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので
ドキュメントに明示してあれば問題ないでしょう。
217:デフォルトの名無しさん
07/01/29 18:15:26
>>216
>ASCIIのようにアルファベットがリニアに並んでいる環境なら使えますね。
>評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので
>ドキュメントに明示してあれば問題ないでしょう。
はい。ありがとうございます。
ついでで恐縮ですが、
副作用の起こる使い方ってどんな風な使い方ですか?
218:215
07/01/29 18:18:40
>>216-217
自己レスですみません。
isupper(c = getchar())
↑こういうことですね?
219:デフォルトの名無しさん
07/01/29 18:25:15
>>218
こういうのもです。
isupper(c++);
220:デフォルトの名無しさん
07/01/29 19:21:07
>>219
そういうことですか。
ありがとうございました。
221:デフォルトの名無しさん
07/01/29 20:31:59
まったくどうでもいことだが、範囲比較は想定される数直線的に並べるべきだと思う。
具体的には 'A' <= (c) && (c) <='Z'
222:デフォルトの名無しさん
07/01/29 20:51:30
>>221
全くどうでもいいことだが、比較対象を左辺に置くのが一般的だと思う。
#いや、どちらでもいいけどさ。
223:デフォルトの名無しさん
07/01/29 21:00:33
>>216
> 評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので
違う!
こういうのをマクロでやるのがアホ。
今時のコンパイラはインライン関数でも最適化されるので、副作用とか型チェックのないマクロを使う必要性はない。
224:デフォルトの名無しさん
07/01/29 21:26:36
>>223
↓こういったのはどうですか?
arrは配列のポインタを設定。
#define ARR_SIZE(arr) ( sizeof(arr) / sizeof(arr[0]) )
225:213
07/01/29 21:30:24
>>214
上手く表示できました。
ありがとうございます。
226:デフォルトの名無しさん
07/01/29 21:35:04
>224
それはポインタ突っ込んでドツボにはまる香具師が必ず出てくるので有名なマクロだな。
しかし、コンパイル可能な副作用のある式を突っ込むのは難しくないか?
まー、おいらはstd::vector使うからいーけどさ。
227:デフォルトの名無しさん
07/01/29 21:54:10
>>223
違う!
#define isupper('A'<=((c)%220%156%91))
こうするのが正しいやり方だ!
228:デフォルトの名無しさん
07/01/29 21:56:37
>>224
template でゴニョゴニョすれば代わりになるものが作れるけど、
これに関しては移植性の高いマクロのほうが好きだな。
229:デフォルトの名無しさん
07/01/29 21:58:56
>>227
('A'<=
頬に突き刺さってて痛そうだよな
230:デフォルトの名無しさん
07/01/29 22:03:09
これじゃ、アッパーじゃなくてフックだな。
231:デフォルトの名無しさん
07/01/29 22:27:09
>>224>>227
C++ならboost::sizeはだめか?<boost/range/size.hpp>
232:デフォルトの名無しさん
07/01/29 22:32:38
>>231
boost::size じゃ、>>227 の速度性能には及ばんだろ、多分。
# メンテナンス性は最悪だけど。
233:デフォルトの名無しさん
07/01/29 22:36:08
boost::sizeもO2あたりの最適化を書けてやれば定数に収束するんでねーの、たぶん。
234:デフォルトの名無しさん
07/01/29 22:46:13
>>233
一回しか比較を実施しないロジックに対し速度で対抗しようとしたら
あとはもうテーブルでも用意するぐらいしかないぞ。
235:デフォルトの名無しさん
07/01/29 22:56:53
比較と剰余のどちらのコストが高いかは議論たり得る。
236:デフォルトの名無しさん
07/01/29 23:03:11
じゃ、おいらは
#define isupper(c) ((unsigned)((c)-'A')<26U))
で対抗しちゃる。
237:デフォルトの名無しさん
07/01/29 23:03:26
そうだな。一般的には剰余のほうが速いだろうけど、そうじゃない環境もあるかもね。
238:デフォルトの名無しさん
07/01/29 23:06:15
>>236
お、これなら環境を問わずに最速なんじゃね?
239:デフォルトの名無しさん
07/01/30 00:53:05
fgetcで読み込んだファイル(c)の文字を判定して印刷可能文字ならそのまま出力
それ以外なら空白を表示するプログラムを作っていたのですが
while((c = fgetc(fp)) != EOF){
if(isprint(c) != 0){
buf[n] = c;
n++;
}
else{
buf[n] = ' ';
n++;
}
if(n % 16 == 0){
puts(buf);
for(n = 16;i >= 0;n--){
buf[n] = ' ';
}
n = 0;
}
}
この状態で出力すると16文字目の後にバグのような文字がでてきてしまいます。
いろいろ考えてみたのですが原因がわかりませんでした。どうにかしてこのバグを消す方法はないでしょうか?
Win XPでBorlandを使用しています。
240:デフォルトの名無しさん
07/01/30 00:55:43
連投失礼します。
for(n = 16;i >= 0;n--)ではなく for(n = 16;n >= 0;n--)
でした。よろしくお願いしますm(--)m
241:デフォルトの名無しさん
07/01/30 01:01:38
文字列の終端はナル文字をうめましょう。●4点
242:デフォルトの名無しさん
07/01/30 07:34:48
ぬるぽ
243:がっ
07/01/30 07:39:54
ちんぽ
244:デフォルトの名無しさん
07/01/30 09:00:18
_,ィ、 ,r、__
,.ヘー'´ i `´/ `i_
/ヾ、 ヽ、 i / /ヽ
_ィ、〉 > ´ ̄  ̄ ` く ,ゝ、
}、 ,>'´ 、 ヽ./`ヽ
┌! / / i 「`i ヽヽ ヽ }
Y ! | | l i i l i ',__,.ゝ
,' | | | !l l | l l !
i ! | | | | j___j | |i i!
|i! l ,.|‐T丁i! ハlj, --!`トlノ、||
| ! ! レ'i´ミj "i´ミ iヽ, i || _
| l |i iバ__ソ L__ソ /.ノ |! _ヽ)
| | |l |、//// ' ///// |! |i ヽ)
!ハ |! |,ゝ' ´ ̄ ̄ ` く レy'|!
__,ノ レ'ヽiハ / \}'´ ̄ `ヽ、
ィ´ ̄/ ,べY Y`i__ \
〉/ / , 、ヽ /_`ヽ\ \
,ィ'ん、 / ! '´__ ヽ /´__,.` ', \ ァ'`
`ヽ、/ー' /! __`ヾ! レ'´ _,. ! \ i
/ー-ィ、 ィ__! ___`フ / ヽ二 /7 _i弋
/ 辷j ! ヽ / / / / } j´ 〉
ヽ、 冫 ヽ__ュ_y\ / / /ヽヘ/え´ /
245:デフォルトの名無しさん
07/01/30 12:19:11
>>239
・putsの仕様を確認すべし。
・下手な小細工しないでputcharとかfputcを使ったほうがいいぞ。
・そのコードだと16文字に満たない分が出力されないぞ
246:デフォルトの名無しさん
07/01/30 16:13:41
>>239
> for(n = 16;n >= 0;n--)
17 回実行されるよね。
247:デフォルトの名無しさん
07/01/30 16:31:01
>>221-222
そのような「べき」も「一般的」もありません。
>>230
感服しました。
248:デフォルトの名無しさん
07/01/30 17:09:56
数直線を意識しない奴は、素養がない。
249:239
07/01/30 19:23:13
>>241,245,246
助言ありがとうございます。
いろいろと試してみたらどうにか動きました。
お手数かけました。
250:デフォルトの名無しさん
07/01/30 19:23:52
なんか不安w
251:デフォルトの名無しさん
07/01/30 19:34:31
適当に試行錯誤して動いたらOKという人は、C言語を使うべきではないね。
たまたま偶然、自分が見た範囲内で問題なく動いているように見えるだけ、というのは勘弁して欲しい。
252:デフォルトの名無しさん
07/01/30 21:58:00
>>248
自然言語で読みやすいように書かない香具師はカス。
Ex.
if (NULL = fp) ...
253:デフォルトの名無しさん
07/01/31 07:54:30
>>252
それはコンパイルエラーだろ…常識で考えて。
if(NULL == fp)って書きたかったんだろうけどさ。
俺はいっつも右辺にリテラルを入れる派。
254:デフォルトの名無しさん
07/01/31 08:41:40
>>253
252の挙げている例は、
==を間違って=にしてしまっても、コンパイラがエラーを出してくれるので安全だから、定数は左辺に書け
という、コンパイラが警告を出さなかった時代の人達のクソッタレなコーディングルールを、
今だに実践しているダメな人のことを言っているのだと思うよ。
255:デフォルトの名無しさん
07/02/01 22:04:13
C++勉強始めて一週間ほどの超初心者なんですが、
定数(const)ってしっかり覚えた方が良いでしょうか?
それとも あ〜そんなのあったね。くらいで良いでしょうか?
そりゃ覚えるにこした事は無いと思いますが、なんかイマイチ頭に入らなくて
256:デフォルトの名無しさん
07/02/01 22:05:31
constごときでそんなに苦労するの?
257:デフォルトの名無しさん
07/02/01 22:08:10
覚えられなければ参考書とかグーグルで
すぐ答を引っ張り出せるようにはしておけ
258:デフォルトの名無しさん
07/02/01 22:18:30
ややこしいのもあるから
const char * const s = "ssssss";
とか
class M {
int i;
public:
void setInt(int i) { this->i = i; }
int getInt() const { return i; }
};
こういうのは後回しでもいいかもしれんね。
259:デフォルトの名無しさん
07/02/01 22:31:54
>>255
まだ、勉強始めて一週間ってことだったら、いますぐじゃなくてもいいとは思うけど。
でも、後からでもいいから const は絶対に覚えておけ。
260:255
07/02/01 23:01:13
親切にお答えいただきありがとうございます。
定数は絶対に変えられない!程度に覚えておき、追々勉強していこうと思います
261:デフォルトの名無しさん
07/02/02 00:20:10
c++でグローバル領域において
const double TEISU = 0.05;
とかにして,VS2005でTEISUにマウスカーソルを合わせると
「static const double TEISU」
って表示されるんだけど,勝手にstaticを付けられてるってこと?
int型だとこうはならないんですけど
262:デフォルトの名無しさん
07/02/02 01:09:58
そんな感じ。
C++の名前空間内(含グローバル空間)でのconstはexternを付けない限りstaticと同じ内部リンケージを持つ。
(特に整数型において)ヘッダで初期化して定数として使えるようにするため。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4820日前に更新/129 KB
担当:undef