[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/13 21:50 / Filesize : 246 KB / Number-of Response : 943
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C/C++小心者スレッドPart1



1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:18:18 ]
プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2以降。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す 
 ・FAQを読む 例えば www.bohyoh.com/CandCPP/FAQ/index.html
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、コンパイラ名)
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ 
相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって小心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。


宗教的な話題は禁止します。


152 名前:137 [2008/09/15(月) 17:02:14 ]
>>145
ありがとうございます
参考になります
>>146
ありがとうございます。
チェックしてみます。

>>147
ありがとうございます。
その方法でも試してみたいと思います。

>>151
具体的な指摘ありがとうございます。
終了条件がどのように間違っているか指摘していただきたいのですが、よろしければお願いします。

153 名前:デフォルトの名無しさん [2008/09/15(月) 17:11:17 ]
>>137
デバッガ

154 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 19:12:51 ]
>>152

for(j = 1;j < i;j++){
if(i % j == 0){
primecounter++;
}

1とそれ自身で割れるかどうかをチェックしてるのにj < iだと自身で割ることなく終了する
j <= iに変えれば自分で割ったときもチェックできる

155 名前:トミー ◆xb8eIST5.k [2008/09/15(月) 21:51:15 ]
初めまして。質問させていただきます。
C言語を始めようと思い、いろいろなページを見てみたら、ほとんどにおいて
「まずコンパイラをダウンロードしましょう」と書いてあり、中でも例として
Borland C++ 5.5がよく書いてあったので、これをダウンロードしてみようと
思いました。
www.codegear.com/jp/downloads/free/cppbuilderで「C++ Compiler
5.5/Turbo Debugger」をクリックし、個人情報も登録しましたが、最後に出てき
たダウンロードボタンを押してみると、「サーバーが見つかりません」と出てしま
いました。
見ると、「上記のダウンロードサイトにアクセスできないときは、CodeCentral の
ダウンロードページをお試しください。CodeCentralのダウンロードページを利用
するには、CDNへのログインが必要です。」と書いてあるので、「CDNへのログイン」
の文字をクリックしてみましたが、英語のページで、Login nameやpasswordを入力
する欄が出てきました。(日本語のページもあるようです。)
わたしはCDNには会員登録していません。CDNに登録しないと、C++ Compiler 5.5/
Turbo Debuggerをダウンロードすることはできないのでしょうか。

回答お願いします。

156 名前:デフォルトの名無しさん [2008/09/15(月) 22:02:22 ]
以下のコードでコンパイルエラー(C2440)が出るのですが、何が間違っているのでしょうか?
環境は、VC++6.0です。

class CBase
{
public:
CBase& operator=(int val) {}
};

class CDerived : public CBase {};

int main()
{
CDerived val = 1; // この行で、コンパイルエラー
return 0;
}

エラーメッセージは、
C2440: 'initializing' : 'const int'から'class CDerived'に変換すrことはできません。
 コンストラクタはソース型を持てません、またはコンストラクタのオーバーロード レゾリューションがあいまいです。

157 名前:137 [2008/09/15(月) 23:29:29 ]
>>154
ありがとうございます
肝心なところですね

カーソルが点滅したまま終了しないですが、、
何度も申し訳ございませんが、何が問題か分かる方お願いします。

158 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:33:54 ]
>>156
operator =はCDerivedで定義される暗黙のやつがCBaseのを隠してしまう。
だから、CDerivedで定義し直すなどしないといけない。

もっとも、CDerived val = 1で行われるのは代入ではなく初期化なので、
そういうことをやりたければ、CDerivedにint型の引数を取るコンストラクタを作る必要がある。

159 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:59:55 ]
>>137,157
回している回数じゃないかな
Sigma[i=1...499998]i = 499998*(1+499998)/2 = 124999250001
待っていればいつか終わると思うよ

160 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 00:05:22 ]
>>157
{}の位置が悪い
自分より小さい数で割るたんびにcountを0に戻してる
自分より小さい数で全部割りおわってからcountが2であるかどうか調べないと




161 名前:156 mailto:sage [2008/09/16(火) 00:21:21 ]
>>158
なるほど、そういうことか。
確かに、operator=を定義していなくても、オブジェクトの代入とか出来ますからね。
あれは暗黙で定義されているからってことか。一つ賢くなりました。
ありがとうございます。

162 名前:137 [2008/09/16(火) 01:03:17 ]
>>159
ありがとうございます。
デバッガで見てみると回ってはいるようなので、しばらく待ってみることにします。

>>160
基本的なアルゴリズムが間違っていたのですね、、
ありがとうございます!

163 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:09:12 ]
引数にリファレンスを渡すとオーバーヘッドが小さくなるんですか?


164 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:42:16 ]
値のサイズがリファレンス(=ポインタ)のサイズに比べてかなり大きければなる

165 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:05:01 ]
 今勉強のために文字列クラスを自作しています。
それでoperator+=で文字列の代入結合まではなんとかできたのですが、
operator+の定義がうまくできません。

CString a, b, c;
a = "abc";
b = "def";
c = a + b; //"abcdef"にならない

デバッガで確認したところ、
CString CString::operator+(CString& str)
{
CString temp(*this);
temp += str; //ここまではうまくいっている。
return temp; //ここでデストラクタが呼び出されて、正しい結果を返せない。
}

一応デストラクタはこんな感じです。
CString::~CString()
{
if(ptr) delete[] ptr;
}

tempをstatic宣言したら、結合はうまくいったのですが、プログラム終了時に例外が出るようになってしまいました。
どうすればうまくいくのかどなたか教えて下さい。


166 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:14:22 ]
>>165
コピーコンストラクタとoperator=作ってる?

167 名前:デフォルトの名無しさん [2008/10/04(土) 23:16:07 ]
いろいろと辺

168 名前:165 mailto:sage [2008/10/05(日) 08:09:11 ]
>>166
operator=は作っていたのですが、コピーコンストラクタは作っていませんでした。
(operator= を定義しておけば必要ないと思っていたもので・・・)
コピーコンストラクタを作ったところ、うまく動作するようになりました。
どうもありがとうございました。

169 名前:デフォルトの名無しさん [2008/10/05(日) 08:46:10 ]
CString::operator+で、足し算定義しているのに、なんでその関数内部で
足し算が出来るんだよ? コンパイル通るのかよ

170 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:41:38 ]
+ と += は別物だよ



171 名前:デフォルトの名無しさん [2008/10/05(日) 11:27:46 ]
べつなのはわかっている ここはなぜいいんだよ

temp += str; //ここまではうまくいっている。

172 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:38:20 ]
// 実は勘違い

173 名前:デフォルトの名無しさん [2008/10/05(日) 11:40:14 ]
すまん間違えた

174 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:08:04 ]
単純な事質問するんだけど

型の宣言って複数の関数をまたいでするって出来ないのかな?
うまく説明出来ないんで悪いんだけど
例えば
read.cpp
global.h
test.cpp
の3つがあった場合。

read.cpp内でint型を宣言するとread.cppで宣言した型を使った関数を作る(ここで代入)。
次にglobal.h内でread.cppで作った関数をextern void 何々();とする。
そして、test.cppでglobal.hをインクルードして、test.cpp内でread.cppで作った関数内で代入されたint型を読み込ませたい。

記述は間違ってないと思うんだけど、ビルドするとtest.cppで読み込んだはずの代入されたint型が読み込まれてなくて、定義されてないと出る

・・・初歩的な事で悪いんだけど、根本が違うのかな?ご教授お願いします。

175 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:11:48 ]
>>174
「int型を宣言」とか「int型を読み込む」とか、かなり奇怪な話になっててよくわからん。
どうせ単純なミスかなんかだろ。実際のコード晒してみるのがいいよ。

176 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:19:44 ]
余計な所省いて晒してみる、まだ日が浅くて酷いコードでごめん。
ReadingFile.cpp

int enemy_img;
void readingfile(){
enemy_img = LoadGraph("date/img/enemy.bmp");
}

GlobalM.h
extern void readingfile(); //全ての素材


enemy_move.cpp

void enemy_move_02(){

move02.enx+=sin(PI*move02.eny/80)*5;
move02.eny+=1.5f;

DrawGraph( move02.enx , move02.eny , enemy_img , TRUE ) ;
                           ↑ここでReadingFile内の関数で指定したのを読み込ませたい。
DeleteGraph( enemy_img ) ;


}

177 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:28:55 ]
>>176
extern int enemy_img;

178 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:35:16 ]
>>177
ありがとおおお
でもどうしてintも読み込ませないといけないんだ?

既にReadingFile.cppで読み込んでいるし、多重定義になるかと思ってた。

179 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:47:41 ]
コンパイラは、各ソースファイルを別々にコンパイルしている
他のソースに何か書いてあっても、
今コンパイルしてるソース (と、そのインクルード先) に書いてなければ、コンパイラには判らない

180 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 15:15:44 ]
>>177は「int型のenemy_imgという変数がどこかにあるはず」という情報。
コンパイラはその「あるはず」という仮定をオブジェクトファイルに埋め込む。

そしてリンカが全部のオブジェクトファイルからその変数を探して、実際のアドレスに直す。
(見つからなかった場合はリンクエラーになる)



181 名前:デフォルトの名無しさん [2008/10/16(木) 01:38:42 ]
>>155ではありませんが、今私、全く同じ状況で困っています。
どなたかお答えいただけませんか?

182 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 02:10:05 ]
>>181
ttp://www.microsoft.com/japan/msdn/vstudio/Express/
これじゃだめなの?

183 名前:デフォルトの名無しさん [2008/10/16(木) 03:47:20 ]
問題文:2つの円の位置関係(交わる(交点)、含まれる、離れている)

先週C++を始めたばかりなので色々と書き方が解りません;;
考え方は解るのですが……

二乗や平方根などなど……

184 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 04:27:08 ]
>>183
//
// 2つの円の重なりをチェックする。
//
// 引数
// x1, y1, r1 円1の中心x座標、中心y座標、半径
// x2, y2, r2 円2の中心x座標、中心y座標、半径
//
// 戻り値
// 0: 接する 正: 離れている 負: 重なる
//
int circle_check(int x1, int y1, int r1, int x2, int y2, int r2)
{
return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) - (r1+r2)*(r1+r2);
}

185 名前:デフォルトの名無しさん [2008/10/16(木) 15:19:36 ]
srand(0)とsrand(1)が同じ系列を生成するので、ソースコードを見てみたいのですが、
srandのソースコードってどこにありますか?


186 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 16:02:43 ]
お使いのコンパイラによって実装は異なる

187 名前:181 [2008/10/16(木) 19:24:11 ]
>>182
参考書を買って勉強しようと思っているのですが、その参考書で
『C++ Compiler 5.5/Turbo Debuggerをダウンロードして、それを使って勉強』
なものだったので、別のソフトだと操作方法がわからないんじゃないかと不安だったのです・・・。
とりあえずこれでやってみます!回答ありがとうございました。

188 名前:デフォルトの名無しさん [2008/10/16(木) 20:24:04 ]
C++の質問です。2つお願いします

・CString 形式のデータで""hogehoge""というデータが入っていた場合、
前後のダブルクォーテーションを簡単に除去する方法はありませんか?

・char buff[255][3][255] のようなデータをファイルで入出力したいのですが、
何か良い方法はありませんか?

189 名前:デフォルトの名無しさん [2008/10/16(木) 21:18:55 ]
>>188
メモリマップドファイルとstd::stringならsubstr

190 名前:デフォルトの名無しさん [2008/10/16(木) 21:36:55 ]
VC++2008proにて
特定のコード上で右クリックすると確実にフリーズするんですが
似たようなケースさらには対処法あったら教えてください。。
ググったけどほとんど情報が無く、似たような質問がされている所も未だ解答がなかったとです。。

原因は調査中です。ヘッダーファイルを適当にインクルードしまくったから無限ループ起きたか?
と思って全部コメントアウトしてみたけど無意味でした。。

他の情報としては、
普通はマウス乗せたらメンバの情報が出てきますが、そのコードではそれすら出てきません。
一応左クリックおよびファイルの編集はできます。
右クリックだけ永久砂時計が発動します。

他も何か手がかりになりそうな所あれば探したいんで
アレがひっかかってるんじゃね? とか言っていただけると助かります。



191 名前:190 mailto:sage [2008/10/16(木) 22:42:32 ]
すまんスレチだったか。過疎なのか?
ちょっと他のところで聞いてみます。

192 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:44:03 ]
インストールしなおしかな?

193 名前:デフォルトの名無しさん [2008/10/16(木) 22:51:43 ]
>>192
と思ったらこんなタイミングで……なるほど。

しかしDream SparkでDLした奴なんでもう一度isoをDLできるかどうか……?
MSに報告したほうがいいんでしょうかね。

194 名前:190 mailto:sage [2008/10/16(木) 23:35:13 ]
他スレにて解決しました。お騒がせしました。

別件ですがついでにこちらで質問してみたいことが。

bool b1,b2,b3,b4;があって、
if(b1 && b2 && b3 && b4)
{ 〜〜 }
のようにやることは
if(b1){
if(b2){
if(b3){
if(b4){
〜〜
}
}
}
}
のようにやる事と同じように働いてくれるんでしょうか?
それとも前者はb1〜b4をすべて求めてから論理積を計算し、
後者はfalseがあった時点で処理をやめる、という違いが生じるんでしょうか?

前々から疑問に思っていました。

195 名前:デフォルトの名無しさん [2008/10/16(木) 23:42:58 ]
前は、if-ifの方が速いと思ってたけど、実測すると論理積の方が速い
分岐予測より、論理積のコストは少ない

196 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:46:47 ]
>>194
短絡評価と言って、左から順に見ていきfalseが出てきたら残りは評価されない。
だから上と下のどっちの書き方でも同じ意味になる。
もちろん、実際にコンパイラがどういうコードを吐くかは別として。

197 名前:190 mailto:sage [2008/10/16(木) 23:51:54 ]
>>195-196
本当ですか、安心しました。
短絡評価、まぁ考えてみたら、してくれないとスマートじゃないですよねw
実測とかしたことない……やっぱそういう経験も役に立つんですね。
ありがとうございましたm(__)m

198 名前:デフォルトの名無しさん [2008/10/17(金) 00:54:32 ]
>>189
亀レスだけどサンクス、調べてみるよ。

199 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 02:49:46 ]
>>198
str.trim('\"')でできそう!

200 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 09:01:45 ]
>>185
メルセンヌツイスターのソースを使えば良いジャマイカ



201 名前:デフォルトの名無しさん [2008/10/17(金) 14:06:39 ]
簡単にコピペできるのはXORシフト ライセンスとかあんまりなさそうだし 
商用に組み込んだとしても問題にならないのでは

202 名前:デフォルトの名無しさん [2008/11/04(火) 18:46:54 ]
文字列を入力して、それを配列に1文字ずつ入れていきたいのですが、どのようにすればよいですか。
具体的にソースを挙げて教えてください。
よろしくお願いします。

203 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 18:58:54 ]
>>202
char buf[適当な長さ];
fgets(buf, sizeof(buf), stdin);

204 名前:デフォルトの名無しさん [2008/11/04(火) 19:18:29 ]
>>203
返信ありがとうございます。

205 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 14:47:28 ]
typedef unsigned char bBuffer[128];
typedef DWORD wBuffer[32];

bBuffer A;
wBuffer B;

AからBにキャストするにはどうすればよいのでしょうか?
でるぴだと B:= wBuffer(A); なんですけど

206 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 15:24:37 ]
キャストに配列を指定してはいけない。つまり、foo = (Foo [])bar;こういうのはできないのよ。
代入したいのならmemcpy()でも使う。

それにしてもObjectPascalは、型が緩いんだろうか。

207 名前:205 mailto:sage [2008/11/05(水) 16:37:40 ]
>>206 ありがとうございます。
memcpy()で期待通りに出来ました。

delphiだとなぜか使えるんです。

208 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:14:41 ]
wiiリモコンのライブラリってどこにあるんですか

ttp://www.thinkit.co.jp/cert/article/0711/2/5/2.htm
に載ってるところ探しても無いんですが

209 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:43:09 ]
あるじゃん

210 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:32:35 ]
あ、あった
ここですね
ttp://wiiyourself.gl.tter.org/

どうもです



211 名前:デフォルトの名無しさん [2008/11/08(土) 02:14:04 ]
ここで聞いていいのかわからんけど一応きいてみる
スレチならごめん

今、ユーグリット云々つかって最大公約数を求めるプログラム作ってて
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7968.txt
ってとこまではできたんです。2つはできるんですけど
問題は3つ以上の数を調べるときなんです。普通に文字数を増やして計算させるだけじゃできないようで、
いろいろしたんですけど詰まってしまいまして
どこをどう変更すれば、3つ以上の数の最大公約数をしらべるプログラムになるのでしょうか



212 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:15:22 ]
gcd(gcd(x, y), z);

213 名前:デフォルトの名無しさん [2008/11/10(月) 19:33:43 ]
¥nで文字数があわなくて1日中悩んでいたが
¥r¥nかよ!
ゲイツのバカヤロー!

214 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:58:35 ]
>>213
何をいまさら。 UNIX原理主義者は始末に終えんな。

それは、デジタルリサーチのCP/M-80(CP/M-86)との互換性を保つために
そうなっている。 文句があるなら、墓の下で眠るゲイリーキルドールに
言え。

ちなみに、OS-9の行末コードは'\r'のみだ。

215 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 20:31:53 ]
タイプライターに文句いえ

216 名前:デフォルトの名無しさん [2008/11/11(火) 07:09:03 ]
初歩的な質問なのですが、
staticはどう言った変数や関数に付ければ良いのでしょう。
staticの働き事態はわかるのですが・・・

217 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:44:01 ]
>>216
・関数
外部に公開しない全ての関数につける。
単一ソースファイルでプログラムを作るのなら、staticをつけないのはmain()だけでいい。

・変数
自動変数で事が足りない場合。
関数外部で宣言したい場合で、外部に公開する必要がない場合。

218 名前:デフォルトの名無しさん [2008/11/11(火) 12:09:23 ]
C++でビットマップを表示するのに、("ファイル名")ではなく(variable)を使用するにはどうしたらいいでしょうか?

例:
String^ variable = "C:ファイル名";
Bitmap^b = gcnew Bitmap(variable); // エラー

219 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:04:54 ]
C++/CLIは別スレへ

220 名前:デフォルトの名無しさん [2008/11/11(火) 15:47:57 ]
コンパイルをすると
_declspec(align('16'))の仮引数は配置されません
とエラーが出てしまいました。vectorのせいだと思うのですが、このエラーは
どういったときに出るのでしょうか・・・




221 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:35:36 ]
Ubuntu 8.10 で手持ちの ANSI C プログラムをコンパイルしようとしたら、
usleep が無いと言われたのですが、usleep は unistd.h に入ってるはずですよね?
ちなみに Darwin の cc でコンパイルしたときはうまくいきました

/usr/include/unistd.h をみてみると

#if defined(__USE_BSD) || #defined (__USE_XOPEN_EXTENDED)
...
#endif

で囲まれてました。そこで cc に -D__USE_BSD オプションをわたしてみたものの
やっぱり定義されてないと言われます。
ubuntu の cc で usleep を使うときはなにかしらやり方があるのでしょうか?

222 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:49:13 ]
www.linux.or.jp/JM/html/LDP_man-pages/man3/usleep.3.html
> POSIX.1-2001 では、この関数は過去のものと宣言されている。代わりに nanosleep(2) を使うこと。
> POSIX.1-2008 では、 usleep() の規定が削除されている。

とか書いてあるので、代わりに nanosleep を使ってみたらどうだろう

223 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:07:14 ]
>>221
ansi cにusleep()などない!

224 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 23:26:53 ]
>>218
まさかとは思うが、"C:\\ファイル名"とかいうオチじゃないだろうなw

225 名前:221 mailto:sage [2008/11/12(水) 09:58:31 ]
>>222
情報どうもです。
とりあえず
#ifndef __USE_BSD
# define __USE_BSD
# include <unistd.h>
# undef __USE_BSD
#else
# include <unistd.h>
#endif

としてその場をしのいだんですが、そのうち nanosleep を使うように書き直したいと思います

226 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:21:41 ]
メモリリークを調べるため_CrtSetDbgFlag関数を使おうとして
以下のように書いたのですがリンクエラーが出ます

#include <crtdbg.h>
 ・
 ・

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// メモリリーク検出
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
 ・
 ・
 ・
}

エラー内容
GameT error LNK2019: 未解決の外部シンボル __CrtSetDbgFlag が関数 _WinMain@16 で参照されました。

他にも何かインクルードする必要がありますか
開発環境はVS2003で、OSはWinXP_SP3です

227 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:05:07 ]
ゲ製板からの出張乙
リンクエラーと自分で書いてるだろ
するべきことはインクルードではない

228 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 12:54:30 ]
リリースビルドだったりしてな。

229 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:37:24 ]
2003にあったっけ?

230 名前:226 mailto:sage [2008/11/14(金) 23:40:50 ]
>>227
なぜゲ製板とわかるのでしょうか

>>228
DebugかReleaseのとこですよね
Debugにしています

よくわからないので新規プロジェクトで試したらできました
これに少しづつ作ったものを貼り付けていって原因を探してみる



231 名前:デフォルトの名無しさん [2008/11/15(土) 23:28:04 ]
不特定多数のデータを受け取る際に、スペースで区切りながらそれらを配列に格納するにはどうすればよいのでしょうか。
例として、
「2 3 5 6」
「2 3 1 3 4 5 2」
というスペースで区切られた数があり、これらをそれぞれ別の配列に格納したいのです。
入力は
2 3 5 6(ここでエンター)
2 3 1 3 4 5 2
となります。
コードと一緒に解説してくださるとありがたいです。

232 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 00:16:28 ]
つ[strtol()]

233 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 00:52:12 ]
すいません。
C++で、コンパイラのように構文解析をする処理などを勉強できる書籍はないでしょうか?
プログラム板に初めてくるので、このスレでいいのか判断に迷いますが、、、
よろしくお願いします。

234 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:03:27 ]
コンパイラの教科書の最初の方に載ってるよ

235 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:12:08 ]
アサーションをインラインで宣言して、どこの行でエラーが起こったか知りたいです。
以下の様に書いてみましたが、インライン関数MUSTOKの行数でエラーが起こった、もしくは、assert関数がある行が
表示されてしまいます。できればこの関数MUSTOK(0==1);がある行が知りたいのですが、どうしたらよいでしょうか?

実行環境
gcc バージョン 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
ubuntu8.4
ソースコード
==
#include <cassert>
#include <iostream>
inline void MUSTOK(bool cond)
{
if(!cond)
{
std::cout<<"file=:"<<__FILE__<<"\tlie=:"<<__LINE__<<std::endl;
}
assert(cond);
}
int
main(int argc,char *argv[])
{
MUSTOK(0==1);
return 0;
}
==
実行結果
file=:assert_test.cpp lie=:7 assert_test: assert_test.cpp:9: void MUSTOK(bool): Assertion `cond' failed. Aborted



236 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:21:33 ]
>>235
MUSTOKをマクロで実装するしか。

237 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:23:50 ]
>>235
backtrace,backtrace_symbolsってのを使うとどこから呼び出されてるか表示出きるみたいだよ。

238 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:42:04 ]
>>234さん
233です。ありがとうございました。
書泉に行ったときに探してみます。

239 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:33:25 ]
Cのプログラムで、他のプログラムhogeをコマンドラインパラメータ付きで実行し、
その実行の終了を待って、hogeのmain関数が返した値を取得したいのですが、
どうすればよいでしょうか?標準のC関数だけでできますか?

240 名前:デフォルトの名無しさん [2008/11/16(日) 12:40:35 ]
できません。winAPIでやってください



241 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:50:22 ]
Cで、引数で指定されたファイルを、system関数を使って、
メモ帳で開くにはどうすればよいでしょうか?
ご教授お願いします。

242 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:58:13 ]
system("メモ帳の場所 引数で指定されたファイル")

あとは
www.google.co.jp/search?q=C%8C%BE%8C%EA+system
から探しなー

243 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:06:03 ]
>>240
馬鹿も休み休み言ってください。

>>239
一般的に、アプリはsystem()で起動すればmain()の戻り値を回収できる。
但し、GUIアプリなどで動いているにも拘らずすぐに戻ってきてしまう場合は、
コマンドインタプリタ(command.comとかbashとか)の支援が必要になる。
コマンドインタプリタを介在させたくなければ、そこでやっと>240の言うようなAPIの出番となる。

>>241
system("notepad any.txt")でいいとして、そのテキストファイル名を可変にしたいなら
文字列を組み立てればいい。

244 名前:デフォルトの名無しさん [2008/11/16(日) 13:36:09 ]
リソースから拾ってきた文字に対して置換ってどうやってる?
たとえば
 「File %1 is too long.」  ⇒ 「File "C:\hogehoge.foo" is too long.」
みたいな。

変換先文字列分拡張して memmove で必死に頑張ってもいいんだけど、
ATL/WTL 使ってるのでそれらのライブラリで便利なのがあればいいなぁと
思って…

教えてエロい人><

245 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:39:01 ]
>>244
%1を適当に変換してから、sprintf()

246 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:40:18 ]
置き換えしたいところを%sとかにして、sprintf使うとか。

247 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:40:47 ]
boost::format使えば楽じゃね。

248 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:48:57 ]
>>245、246

そうか、%1 じゃなくて別にいいんだもんね。
「File %s is too long. (sizeof: %s. current: %s)」
とかにして順番に sprintf の引数に積めばいいのか!

>>247

STLワカンネ・・・orz
でもせっかくなので勉強してくるYO!


即レスthx!!!
みんな優しいね。大好き。

249 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:02:14 ]
FormatMessage の立場がねーな、おい。

250 名前:デフォルトの名無しさん [2008/12/17(水) 02:15:02 ]
入力によって処理を変えるプログラムを作っていて、予期せぬ入力があった時メッセージを表示して、もう一度入力させるプログラムを作っているのですが、2度同じ表示が出てしまいます。

for(;;)
{
scanf("%c",&input);
if(input == 'S' || input == 's')
{
printf("GAME START!¥n);
}

else if(input == 'Q' || input == 'q')
{
printf("GAME QUIT¥n");
return 0;
}

else
{
printf("input failed¥nPlease input again¥n");
}
}

どこを変更すれば、2度表示されなくなるでしょうか。
よろしくお願いします。



251 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 02:35:15 ]
たぶん改行('\n')が残っているんだと思うよ。
scanf()の後に、
if ( input != '\n' ) {
while ( (c = getchar()) != '\n' ) {
; /* 意図した空文 */
}
}
こういうの追加しておくとか。

scanf()で文字ではなく文字列受け取って、最初の要素だけ利用するとか。
fgets(,,stdin)で、上記と同じようにするとか。

 ゲーム作っているみたいだから、がんばってとしか言えないけど。

252 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 07:48:35 ]
const で変数宣言する必要性を教えて下さい






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<246KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef