【初心者歓迎】C/C++室 Ver.59【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.59【環境依存OK】 - 暇つぶし2ch175:デフォルトの名無しさん
08/04/01 16:37:49
かわうそうだからもうそっとしといてあげようよ

176:デフォルトの名無しさん
08/04/01 16:38:03
この連載、続くのか、打ち切りになるのか・・・

177:デフォルトの名無しさん
08/04/01 16:39:01
>>175
バンブーブレードのアニメを思い出したw

178:デフォルトの名無しさん
08/04/01 16:40:54
前橋さんに書いて欲しい

179:デフォルトの名無しさん
08/04/01 16:41:47
え、連載なの?

180:デフォルトの名無しさん
08/04/01 17:10:38
>>164
スミマセン『記事』でしたね。でもCあまり判らないので。。。

181:デフォルトの名無しさん
08/04/01 17:11:33
URLリンク(builder.japan.zdnet.com)
特集だな。

>>180
それはC言語の問題じゃないだろ。
日本語やり直せ。

182:いっそ誰か転載してくれw
08/04/01 17:26:55
問題は件のページだけではない。
こちらのページから引用してみよう。
URLリンク(builder.japan.zdnet.com)
--
データを区切る文字を空白などではないものにする方法だ。たとえば”%s,%s”とすれば、”abc def,ghi”を”abc def”と”ghi”という2つの値として入力することができる。
--
これも、実験してみれば直ぐに判るが出鱈目である。
一体全体、この特集はどんな技術者を作ろうと言うのだろうかw

183:デフォルトの名無しさん
08/04/01 17:44:37
何の話かと思ったら、scanf()か

184:デフォルトの名無しさん
08/04/01 17:46:36
>>182
scanfで入力制限が出来ることを知らなかったorz

185:デフォルトの名無しさん
08/04/01 18:02:09
>>184
普通は、scanf()では使いにくいから、入力制限はsscanf()で使うんだけどね。
所謂入門書でその辺りにきちんと触れているものは、知る限りないね。

186:デフォルトの名無しさん
08/04/01 18:07:30
>>182 確かに酷いな

187:デフォルトの名無しさん
08/04/01 18:11:27
URLリンク(builder.japan.zdnet.com)
推薦の数が飛び抜けているな

188:デフォルトの名無しさん
08/04/01 20:53:23
件の人の(URLリンク(builder.japan.zdnet.com))
>また、doubleからはlong double(12バイト分)を派生させることができるが、
>floatではそれができないという違いがある。
ってどういう意味なんでしょうか?

189:デフォルトの名無しさん
08/04/01 20:58:36
long float
という型が無い事を言いたかったんじゃね?

日本語でおkな記事だな

こんなん初心者に読ませても害にしかならないな

190:デフォルトの名無しさん
08/04/01 21:01:05
おれ、今までlong doubleって10バイトって思ってたよ。

191:デフォルトの名無しさん
08/04/01 21:15:41
>>189 なるほど。

192:デフォルトの名無しさん
08/04/01 21:19:08
long double が 12 バイトの環境は見た事無いなあ。
10 か 16 ならあるが。

193:デフォルトの名無しさん
08/04/01 21:22:48
sizeof(long double)
12bytes gcc (MinGW)
10bytes Borland C++ Compiler

194:デフォルトの名無しさん
08/04/01 21:23:28
普通の gcc だと 16 だな。

195:デフォルトの名無しさん
08/04/01 21:34:38
仕方ない、取り敢えず特集の全ての記事にダメ出ししてくるか。
これだけ頓珍漢な記事だらけならパーフェクトも狙えるだろw

196:デフォルトの名無しさん
08/04/01 21:36:46
>>182
これ何か不味いのか?

197:デフォルトの名無しさん
08/04/01 21:47:56
>>196
#include <stdio.h>
int main() {
char a[10], b[10];
switch(sscanf("abc def,ghi", "%s,%s", a, b)) {
case 2:
puts("a, bともに読み込めた。");
puts(a);puts(b);
break;
case 1:
puts("aだけ読み込めた。");
puts(a);
break;
case 0:
puts("aもbも読み込めなかった。");
break;
case EOF:
puts("エラー");
}
return 0;
}

どうなるとおもう?

198:デフォルトの名無しさん
08/04/01 21:54:06
上と下ではどっちが速いですか?

bool rb = m_map.insert(std::make_pair(key, value)).second;
if(rb)
{
  ほげほげ;
}

if(m_map.insert(std::make_pair(key, value)).second)
{
  ほげほげ;
}

199:デフォルトの名無しさん
08/04/01 21:55:14
いっしょだろ。

200:デフォルトの名無しさん
08/04/01 21:56:23
変数にコピーする分上が遅い。

201:デフォルトの名無しさん
08/04/01 21:58:21
>>197
aだけ成功

スペースの後が終端文字列になってた

202:デフォルトの名無しさん
08/04/01 21:58:43
>>200
その程度なら最適化で消えることが期待できる。

>>198
実測重要。

203:デフォルトの名無しさん
08/04/01 22:00:30
下はスタックポインタの変動が一回多くなるので、極々僅かに遅くなる気も?

204:デフォルトの名無しさん
08/04/01 22:00:55
.     人
     (  )
  , '´ ̄  `ヽ
  / ( ( 人人) ) 最適化すれば消えるのではないかと
  |人| '_'|ノ   ふじおかが言っている。
 ノノ| |o○_⌒_○
     ( エ )
.     o( )o
       uu



205:デフォルトの名無しさん
08/04/01 22:05:51
>>193 でもMinGWだとこれが?→ unsigned int 0以上の整数 (0から65535)

206:デフォルトの名無しさん
08/04/01 22:15:46
if(!banana)と、書くのが気持ち悪いのですが、
if(true != banana)と、書くとスピードが落ちますか?

207:デフォルトの名無しさん
08/04/01 22:21:01
if(banana == flase)じゃないのが気持ち悪いな

208:デフォルトの名無しさん
08/04/01 22:21:46
うお 間違えたw

209:デフォルトの名無しさん
08/04/01 22:24:30
>>205
どういう意味でしょう?
MinGW でも unsigned int は 0~4294967295 の範囲です

210:デフォルトの名無しさん
08/04/01 22:32:28
>>206
とりあえず>>207に直したとして、まず変わらん。
むしろ変わる環境があったらちょっと興味がわく。

で、速度は実測が基本。一応ね。

211:デフォルトの名無しさん
08/04/01 22:46:02
trueと比較するのは(速度は兎も角)確実に1ステップ無駄な処理が入る。

212:デフォルトの名無しさん
08/04/01 22:47:05
うそーん

213:デフォルトの名無しさん
08/04/01 22:56:11
>if(!banana)
と、
>if(true != banana)

コードの意味合いが異なる

214:デフォルトの名無しさん
08/04/01 22:58:32
>>209 >>188の記事からの引用です

215:デフォルトの名無しさん
08/04/01 23:05:34
class hoge
{
hoge(){←エラー
rcdefault.top = 0;
rcdefault.left = 0;
rcdefault.buttom = 480;
rcdefault.right = 640;
}
static const RECT rcdefault;
}

性的で固定な構造体の中身はどうやって指定するの?

216:デフォルトの名無しさん
08/04/01 23:10:47
ピコエロス

217:デフォルトの名無しさん
08/04/01 23:19:11
class HOge{
static const A a;
};

const RECT HOge::a = {1,2,3,4};

218:デフォルトの名無しさん
08/04/01 23:27:05
URLリンク(builder.japan.zdnet.com)
--
本来の名称は1文字のCなのだが、それだけだと分かりにくいからか、一般的にはC言語という。
--
# C言語と表記することが多いと認めるのは吝かではないが、果たして開発現場でC言語と呼ぶ輩はどれほどいるのだろうか。
--
子孫にあたるプログラム言語には、同じくオブジェクト指向が取り入れられているJavaなどがある。
--
# いつからJavaはCの子孫になったんだ?

URLリンク(builder.japan.zdnet.com)
--
しかし、前述の通り携帯電話などの機器の動作はC/C++で開発されたプログラムによって行われている。
--
# そうなんですか? 本当に?

URLリンク(builder.japan.zdnet.com)
--
floatよりもdoubleのほうが扱える数値の範囲が広くなる。そのため、floatよりもdoubleのほうが精密な値を表すことが可能になる。
--
# 「そのため」ではありません。無茶を言わんでください。

URLリンク(builder.japan.zdnet.com)
--
printf( "|%5.3f %-9.4f|", 12.34, 56.789 ); /* |12.340 56.7890 | */
--
# わざわざ初心者を混乱させなくてもいいでしょう。素直に%6.3fとしては如何?

219:デフォルトの名無しさん
08/04/01 23:36:51
さすがに重隅ウザイ

220:デフォルトの名無しさん
08/04/01 23:37:35
できました。

221:デフォルトの名無しさん
08/04/01 23:40:22
>>218
ここに書くと筆者が見てくれるの?

222:デフォルトの名無しさん
08/04/01 23:43:52
>>220
who?

223:デフォルトの名無しさん
08/04/01 23:46:47
規格内に C 言語って記述がいくらでもあるのに・・・。

224:デフォルトの名無しさん
08/04/01 23:51:37
The Programming Language C

225:デフォルトの名無しさん
08/04/01 23:54:05
今マルチスレッドで裏で画像読み込みとかやってるんですが、
あるスレッドが専用の関数に必要な引数を渡して、要求だけ
vectorにキューイングしてで出て行く、そして読み込み用のスレッドがこのvectorから
メッセージを取り出して画像読み込み操作を行うという形なんですが

なんかどこかで衝突?みたいなことが起こってるみたいで成功したり失敗したりです。。。
メッセージは追加時push_backで取り出し時begin()使ってます。
Javaのsynchronizedみたいに排他にするにはどうすればいいんでしょうか?

226:デフォルトの名無しさん
08/04/01 23:56:50
>>225
STLはひどい事にマルチスレッドに対応してない実装をコンパイラ製作側が提供しても良い仕様になってるので、
別途マルチスレッドに対応したフラグを外側から用意するなど措置をとる必要がある。

227:デフォルトの名無しさん
08/04/01 23:56:59
>>225
winならCriticalSectionやMutexとか。
それ以外でもならboost::threadとか。

228:デフォルトの名無しさん
08/04/02 00:03:51
STLportを使う

229:デフォルトの名無しさん
08/04/02 10:01:26
文字列を配列で宣言するのとポインタで宣言するのって何か違いがあるんでしょうか?
やってること同じだと思うんですけど。

230:デフォルトの名無しさん
08/04/02 10:10:28
char a[]="test";とchar *b="test";のことを言ってるなら違いはある。とりあえず配列を使っておけば問題ない。

231:デフォルトの名無しさん
08/04/02 10:10:50
>>229
> 文字列を配列で宣言するのとポインタで宣言するのって何か違いがあるんでしょうか?
> やってること同じだと思うんですけど。
その通りやってることは同じなので、好きな方でどうぞ。

232:デフォルトの名無しさん
08/04/02 10:27:44
はじめまして。
VBを今週から始めた初心者です。
上司に教わりながらやっていますが、全くわかりません。

とりあえず、言われた仕事が
モジュール2で
Public Sub 関数名()
'表を追加します
End Sub
を作成して、モジュール1でcollで呼び出すらしいんですが
表を追加の関数がわかりません。
誰か教えて下さい。

233:デフォルトの名無しさん
08/04/02 10:28:52
その上司に聞けよ。
というかスレ違いだ。

234:デフォルトの名無しさん
08/04/02 10:29:30
落ち着け

ここはC/C++スレだ

235:デフォルトの名無しさん
08/04/02 10:31:09
>>230
その違いについて知りたいんですが、、、メモリの問題とかですかね

236:デフォルトの名無しさん
08/04/02 10:33:55
232です。
申し訳ないです。
どこに書けばいいのかわからなくて。。。


237:デフォルトの名無しさん
08/04/02 10:37:38
それすら調べられないならマに向いてないから辞めた方が良い

238:デフォルトの名無しさん
08/04/02 10:48:57
>>226,227ありがとうございます。
面白そうなので自分で作ってみることにします。

239:デフォルトの名無しさん
08/04/02 10:49:38
そうですね。
辞めてしまいたいです。

240:デフォルトの名無しさん
08/04/02 10:55:29
>>239
仕事じゃなくて課題なのでは? 未経験でも出来る課題を出されたんじゃないですか?
プログラム経験はあるんですか?

241:デフォルトの名無しさん
08/04/02 11:10:26
本当に初心者なし質問かと思うのですが
URLリンク(tondol.ty.land.to)
のプログラムなんですが、数字を二つ入力するのですが
1 2
という入力ではなく
3
というように数字一つで改行されたらプログラムを終了するようにしたいのですが
どのようにすればいいのでしょうか?

242:デフォルトの名無しさん
08/04/02 11:12:30
文字列で受け取って自分で調べる

243:デフォルトの名無しさん
08/04/02 11:52:31
すいません文字列で受け取るとはどういうことでしょうか?

244:238
08/04/02 12:03:36
Mutexで神速でできてしまったんだけど、ミューテックスだとどんな制限があるんでしょうか?

245:デフォルトの名無しさん
08/04/02 12:18:56
多重起動防止

246:デフォルトの名無しさん
08/04/02 12:19:23
>>244
排他処理を追加した分遅くなる。MutexよりもCriticalSectionセクションのほうが速いので用途に応じて使い分けるとよい。

247:デフォルトの名無しさん
08/04/02 12:20:21
ミューテックスを使うと投機実行の処理が多くなったり、より速いアクセス速度のあるキャッシュへのデータ格納最適化ができなかったりする。

248:デフォルトの名無しさん
08/04/02 13:01:07
>>236
EXCELにVBAのリファレンスついてないのか?
まあ該当スレは検索すればすぐ見つかるだろうけど,質問しても
やってトライ.シリーズでいいからEXCEL/VBAの参考書一冊買え
みたいな話になるだけですぞ

249:デフォルトの名無しさん
08/04/02 13:21:53
>>236
排他制御比較一覧
URLリンク(msdn.microsoft.com)


250:デフォルトの名無しさん
08/04/02 13:22:45
上の、236じゃなくて>>236へだった

251:デフォルトの名無しさん
08/04/02 13:23:13
>>238
何度間違ってるんだorz

252:238
08/04/02 15:33:58
>>245-247,249-251
ありがとうございます。ほくほくです

253:デフォルトの名無しさん
08/04/02 20:29:09
c++ VisualStadio.net
TestProgプロジェクトにあるCTestClassクラスをライブラリにしてMainProjプロジェクトで使おうとしています。
CTestClassクラスが宣言されているTestClass.h、TestClass.cpp、そしてほとんどカラのstdafx.hとstdafx.cppをビルドしてTestProg.libを作成しました。
そしてMainProjプロジェクト内のファイルにて
#pragma comment(lib, "TestProg.lib")
このようにライブラリの使用を宣言するまでは問題なかった(ビルド成功)のですが、CTestClassを使おうとすると宣言がされていないとエラーが出ます。
ライブラリ内のクラスを使うにはこれらに加えて何かしないといけないのでしょうか?
ちなみにMainProjにTestClass.hとTestClass.cppを追加し、上記の#pragmaの代わりに
#include "TestClass.h" を入れるとエラーは出ませんでした。

254:デフォルトの名無しさん
08/04/02 20:43:05
TestClass.hへのパスは通ってますか?


255:デフォルトの名無しさん
08/04/02 20:55:23
   /     /     /      /  /  / /
/     /     /     /     /   /   
                 ,.、 ,.、    /   /      
    /    /      ∠二二、ヽ    / /  
  /    /   /   ((´・ω・`)) ちょっと船の様子を見に行ってくる… 
               / ~~:~~~〈   /  / 
       /    /  ノ   : _,,..ゝ   / 
    /    /     (,,..,)二i_,∠  /    /

256:デフォルトの名無しさん
08/04/02 21:30:23
>>253
// MainProjプロジェクトにTestProg.libとTestClass.hコピーして
#pragma comment(lib, "TestProg.lib")
#include "TestClass.h"

257:238
08/04/02 21:32:33
 ∧_∧
..(    *)
..(    )〇
なんだか胸騒ぎがする・・・。

258:デフォルトの名無しさん
08/04/02 21:57:43
Xcodeで開発しているのですが、
"クラス::関数()", referenced from:
とエラーが出ます。
調べてもどういう意味のエラーかも分からずです。
どういう意味のエラーなんでしょうか?

259:デフォルトの名無しさん
08/04/02 22:12:53
>>258
エラーメッセージはそれだけじゃないでしょ。前か後にも何か書いてあるはず。


260:デフォルトの名無しさん
08/04/02 22:14:58
>>256
ありがとうございます。使えるようになしました。
>>254
それは何度も疑っていたので大丈夫でした。
パスが通っていないとエラーが出ますしlib自体が正常に更新されているかどうかも確認していました。


複数のサブプロジェクトでクラスを作り、メインプロジェクトでこれらをライブラリとして読み込むために試行錯誤していました。
.hと.cppをコピーしてメインプロジェクトに追加するとメインプロジェクトだけで変更が可能なのと
ファイル数が膨大になり管理がしにくくなるので改善したいと言うのが主な理由です。
今回の場合ですとMainProjプロジェクトでCTestClassクラスのメンバ変数や関数を自由に追加することが出来てしまったり
TestProgプロジェクトでCTestClassクラスを更新するとMainProjプロジェクトのTestProg.libだけでなくTestClass.hの更新も必要になってしまいます。
MainProjプロジェクトのCTestClassクラス自体に変更が加えられないような仕組みや
更新がlibだけで済むような方法は無いものなのでしょうか。


261:デフォルトの名無しさん
08/04/02 22:31:40
ヘッダをいじらなくて済むようにするイディオムとしてpimplが有名。
少なくともprivateメンバの変更では共有するヘッダに影響を与えないで済む。

262:デフォルトの名無しさん
08/04/02 23:05:52
ある型がクラス/構造体かどうか調べる方法はありますか?
あと、クラスのメンバ関数を列挙する方法はありますか

template<typename T> void enum_functions() {
  if (T::is_class()) {
    for (int i = 0; i < T::func_count(); ++i) {
      std::cout << T::func_name(i) << '\n';
    }
  }
}
みたいな感じで。

263:デフォルトの名無しさん
08/04/02 23:22:54
>>231
嘘はいかんよ。

>>235
>char a[]="test";とchar *b="test";
 *a='T';    /* OK */
 a[0]='w';   /* OK */
// *b='T';   /* NG */
 b=a;     /* OK */
 *b='T';    /* OK */
 b[0]='w';   /* OK */
// a=NULL; /* どうだったっけ?*/

264:238
08/04/02 23:28:59
>>262
どんな実装だよ。
せめてclass Tにしようぜ

265:デフォルトの名無しさん
08/04/02 23:30:32
// *b='T';   /* NG */
 *b='T';    /* OK */
どっちだよ

266:253,260
08/04/02 23:32:01
>>261
初めて知った単語なので非常に有難いです。
結局クラスをライブラリにするのはcppファイルの中身が見えなくなるだけで(ビルドが早くなったりもしますが)
いかにヘッダ部分をcppに移せるかで使用先(メインプロジェクト)での可変性が変わると言うことでしょうか。


267:デフォルトの名無しさん
08/04/02 23:34:28
>>262
思い描いている形とは違うかもしれないけど、
BoostまたはTR1にType Traitsに、is_classというものがある。
かなりコンパイラを選ぶだろうけど。

さすがにメンバの列挙はない。

268:デフォルトの名無しさん
08/04/02 23:35:43
>>259
すいません。
"クラスA::関数()",referenced from:
クラスB::関数() in クラスB.o
symbol(s) not found
collect2:ld returned 1 exit status
とあります。

269:デフォルトの名無しさん
08/04/02 23:40:16
>>265

// *b='T';     /* NG */
 b=a; *b='T';   /* OK */

分かりにくくてスマソ


270:デフォルトの名無しさん
08/04/03 00:43:38
>>268
クラスB.o の中に入っている クラスB::関数() から参照されている "ク
ラスA::関数()" というシンボルが見付かりません、
とリンカー様(ld)が怒ってらっしゃる。

つまり、クラスA::関数() をコンパイルした .o ファイルやそれが入っ
ているライブラリをコマンドラインに指定する必要がある。


271:デフォルトの名無しさん
08/04/03 04:53:36
文字コードの問題です。
wchar_t buff[3];
とあって
SHIFT-JISで書かれたテキストから、fgetwsで読み込む事で
例えば、
「もじ」
ならば
buff[0]<=も
buff[1]<=じ
と、入る事を望みます。

このような処理をする場合、どのようにすればいいのでしょうか?
ちなみに、fgetwsで読むと、buff[0]とbuffr[1]で"も"が入ってしまいます。
fgetwsはsjisで書かれたテキストを自動で変換して読み込んでくれると聞いたのですが・・・。

272:デフォルトの名無しさん
08/04/03 05:00:49
あ、一応自己解決しました。
テキストを、UTF16のBOMなしにして
setlocale(LC_CTYPE, "");を設定し、バイナリモードで読めばよかったんですね。

出来れば、SJISから変換されるとありがたいんですが・・・。


273:デフォルトの名無しさん
08/04/03 08:16:33
std::vector<int> vec;
という変数があるとして、
for (int i = 0; i < vec.size(); i++) {.....}
とか書くとintとunsigned intを比較してるという警告がでて嫌なのでstatic_cast<int>(vec.size())
とかやってるのですが、これもいやです。どうすればいいですか?

274:デフォルトの名無しさん
08/04/03 08:28:55
1.iをstd::vector<int>::size_typeにする。
2.iteratorを使う。
3.STLのアルゴリズムを使う。

275:デフォルトの名無しさん
08/04/03 08:43:33
>>273
4.iをunsignedにする。

276:デフォルトの名無しさん
08/04/03 08:51:22
ありがとうございます。
STLのアルゴリズムを使うというのは、for文の中でやりたかったことがSTLのアルゴリズムで
表現できる必要がありますよね?常にできるということではないですよね?



277:デフォルトの名無しさん
08/04/03 08:55:56
>>271-272
まずは環境を書こう。


278:デフォルトの名無しさん
08/04/03 08:59:30
>>276
{...}の内容によってはちょっと面倒かも知れんので、その場合は2.かな。

279:デフォルトの名無しさん
08/04/03 12:04:46
class complex {
public:
double re;
double im;
};
こういうクラスがあるときに、operator>>(istream &, complex &a) を定義するとすると、
どういう風にやるのがよいでしょうか?

280:デフォルトの名無しさん
08/04/03 12:07:17
そんなクラスは作らずに、標準ライブラリのcomplexを使う。

281:デフォルトの名無しさん
08/04/03 14:05:47
windows2k MinGW を入れたいのです
MinGWインストーラがネット無いので使えません
ソースフォージからどれを落とせば良いでしょうか
またそれは全て同じフォルダに上書きで良いでしょうか
binフォルダなどかぶっているものがおおいんです
使いたいのはC、C++、SDL、OpenGLです
パスは適当に通そうと思っています

282:デフォルトの名無しさん
08/04/03 15:08:36
>>281
大陸へカエレ

283:デフォルトの名無しさん
08/04/03 15:10:11
専用スレで聞いた方がいいんじゃない。自分はDev C++の日本語版で入れたけど

284:281
08/04/03 15:20:11
>>283
ではMinGWスレに移動したいと思います
レス㌧でした

285:デフォルトの名無しさん
08/04/03 15:47:08
C/C++ってつおいですか

286:デフォルトの名無しさん
08/04/03 15:48:47
>>285
未定義です

287:デフォルトの名無しさん
08/04/03 15:52:35
BCBの__propertyはVCでも使えますか。VCで書いてみたら、色が変わったので。

288:デフォルトの名無しさん
08/04/03 15:54:42
MFCを使ってCMainFrameから継承されたウィンドウとCDialogから継承されたダイアログを
MTI(Multiple Top Level Window)風に同時に取扱たいです。

何か参考となるキーワードやソースやwebpageを教えて頂けないでしょうか。

289:デフォルトの名無しさん
08/04/03 16:00:47
>>287
VC入ってるのならF1押してヘルプを見るのだ

290:デフォルトの名無しさん
08/04/03 16:43:19
>>288
キーワード:
モードレスダイアログ
タイマー

291:デフォルトの名無しさん
08/04/03 17:14:42
VCのどっとねっとでないやつでVBやC#みたいなプロパティを作るものはありますか?

292:288
08/04/03 17:16:36
>>290
モードレスダイアログだとダイアログが子になってしまって、ちょっと欲しいものじゃないんです。
親子関係はなし、もしくはCMainFrameを子にしたいんです。

293:デフォルトの名無しさん
08/04/03 17:16:39
ATL

294:デフォルトの名無しさん
08/04/03 17:44:43
>>279
comlex& operator>>(istream & a)


295:デフォルトの名無しさん
08/04/03 17:52:31
>>292
ウィンドウ無か非表示の親からメインフレームとダイアログ作れば兄弟になる

296:デフォルトの名無しさん
08/04/03 17:59:36
_declspec(dllexport)

こういうのって、Cの仕様なんでしょうか? それともコンパイラの方の仕様なんでしょうか?
まとまった文章や文献をご存知の方がいらしゃいましたらよろしくお願いいたしますm(_ _)m

297:デフォルトの名無しさん
08/04/03 18:05:31
DLLはWindows用語

298:デフォルトの名無しさん
08/04/03 18:09:02
文献はMSDNにある

299:デフォルトの名無しさん
08/04/03 18:12:00
>>291
URLリンク(msdn2.microsoft.com)

>>296
独自
URLリンク(msdn2.microsoft.com)

300:デフォルトの名無しさん
08/04/03 18:20:47
先頭にアンダースコアが2つ付いたのは
一部の組み込みマクロを除いて、他は全て処理系の拡張仕様。

301:デフォルトの名無しさん
08/04/03 18:21:29
>>297
>>299
ありがとうございます。勉強してみます。

302:300
08/04/03 19:09:12
俺は無視か・・・。まあいいけどさ。

303:デフォルトの名無しさん
08/04/03 19:19:55
>>302
ばかじゃねぇのw

304:デフォルトの名無しさん
08/04/03 19:31:24
>>302 質問者がレス読んでから投稿ボタン押すまでに書き込むとスルーされる
アフリカではよくあること

305:デフォルトの名無しさん
08/04/03 19:45:47
>>302
すみません、気づきませんでした^^; ありがとうございます。
同じWindows環境でも、処理系に依存する部分は結構ありそうなので、頑張って調べてみます><

306:デフォルトの名無しさん
08/04/03 21:15:07
template<class T>
class A{
public:
void put( T t )
{
std::cout << t << std::endl;
}

};

このようなテンプレートを用意したとして、

A<int> a;

のようにintとして定義した場合に、put()にint以外の引数を
入れるとコンパイルエラーになるようにしたいんですが

a.put( 1.0f ); // 例えばこの場合コンパイルエラーが出るようにしたい

307:デフォルトの名無しさん
08/04/03 21:21:19
A<float>().put(1.0f);

308:デフォルトの名無しさん
08/04/03 21:34:58
template<class T>
class A{
public:
template<class T2>
void put( T2 t )
{
BOOST_STATIC_ASSERT(boost::is_same<T, T2>::value);
std::cout << t << std::endl;
}

};

309:デフォルトの名無しさん
08/04/03 22:00:35
C言語から自作したAPIを呼び出すにはどうすれば良いのでしょうか?
Windows APIは、#include <windows.h>で呼び出すことができるようなのですが、
ソフトウェア屋が作ったAPIをCのソースから呼び出す方法がさっぱり。

ググっては見たのですが具体的な書き方が見つかりませんでした。
参考になるサイト、もしくはソースがあれば教えてください。

310:デフォルトの名無しさん
08/04/03 22:02:40
extern "C"

311:デフォルトの名無しさん
08/04/03 22:04:05
>>309
DLLを動的に呼び出すか、ソースなら#include ""だろ

312:デフォルトの名無しさん
08/04/03 22:06:51
operator<<()の定義の中で、宣言なしにwsという変数を使ってwhite spaceを読み込んでいるものをみたのですが、
これが一体なになのかわかりません。コンパイルは出来ているのでつかえるみたいなのですが、、
ググってもいいのがひっかかりません。どうか教えてください。



313:デフォルトの名無しさん
08/04/03 22:20:15
>>310-311
ソフトウェア屋が用意したAPI(恐らくDLL)を手元のCソースから利用したいんですが…
いまいちわからないです。C言語をやるのは初めてで。

314:デフォルトの名無しさん
08/04/03 22:22:13
恐らくとか言われても・・・。
.lib をリンクして提供されてるヘッダファイルインクルードすればいいだけじゃね?

315:デフォルトの名無しさん
08/04/03 22:23:48
LoadLibrary

316:デフォルトの名無しさん
08/04/03 22:35:46
>>312
空白を読み飛ばすマニピュレータのstd::ws

317:デフォルトの名無しさん
08/04/03 22:36:49
>>297
OS/2やTOWNS-OSでもDLLだったけど生き残ったのはWindowsだけか

318:デフォルトの名無しさん
08/04/03 22:40:25
OS/2はNTの元ネタみたいなもんだし

319:デフォルトの名無しさん
08/04/03 22:40:38
>>314
なるほど…APIを触ったことがないのでどういうものかわかりませんでした。
ライブラリと同じような扱いでインクルードできるんですね。
ありがとうございました。

320:デフォルトの名無しさん
08/04/03 22:43:17
OS/2 って何?そんな子はいませんでしたよ!

321:デフォルトの名無しさん
08/04/03 22:45:56
API
URLリンク(e-words.jp)

322:デフォルトの名無しさん
08/04/03 23:42:51
std::mapのinsert()で戻ってくるiteratorとboolのpairな型はどこかに定義されていないの?

323:デフォルトの名無しさん
08/04/03 23:43:33
c++のcomplexのoperator>>の実装を見たのですが、4+5i という複素数があったとすると、
(4,5) という文字列で入力するようになっていました。実装は()とかの括弧やコンマをみて
ちゃんと処理やってたのですが、普通に考えたら、4+5iとかの文字列の入力の方が自然なような
気がするのですが、(4,5)の方がよいという理由がありますか?
よろしくお願いします。



324:デフォルトの名無しさん
08/04/03 23:47:48
C言語が(,)の入力に対応している点
a+biはC言語が対応していない

325:デフォルトの名無しさん
08/04/04 00:44:30
他人の書いた CやC++ソースが大量にあったとして、
コード解析するときってどうやってる?

Linux 環境で grep や vim + ctags で解析 → gdb で動作確認なんて
やり方してる俺は激しく時代遅れな希ガス

326:デフォルトの名無しさん
08/04/04 00:51:17
>>325
動作させられるなら、動作させてみて、どの関数が一番頻繁に呼び出されてるかをみてみる。
全体の20%のコードが80%の時間を使ってるというしな。

327:デフォルトの名無しさん
08/04/04 01:06:04
>>324
c言語が対応してないというのは、どういう意味ですか?
scanf()で一文字づつ読み込んで解析すればできませんか?



328:デフォルトの名無しさん
08/04/04 01:14:47
>>327
文字列を解析すればできるよ
しかし、直接プログラム内で kansuu(x,y)とかけるのとは違う

329:デフォルトの名無しさん
08/04/04 01:15:14
>>327
何がいいたいのかよくわからんが・・・
>complex x = 3 + 2i;
って使い方がしたいんじゃないのか?そいつぁ無理だ。(少なくともおれの知識じゃ)
なぜそこでscanfが出てくるのがさっぱりわからんが
>complex x = "3 + 2i";
なら、実装は可能だ。
ただ、種々の書式に対応するとめんどくさそうなことこの上ない実装になりそう。

330:デフォルトの名無しさん
08/04/04 01:15:48
プログラム内では、(x,y)の形にするか複素数型に変換するしか無い

331:デフォルトの名無しさん
08/04/04 01:22:17
scanf("%d+%di", &x, &y);
みたいな?w

332:デフォルトの名無しさん
08/04/04 01:35:28
いや、入力は文字列で扱ってるんだが、
"1+2i"じゃなくて、"(1,2)"みたいに、実装してあるのは何で?
って質問だと思われw

333:デフォルトの名無しさん
08/04/04 01:54:54
C++標準のcomplexって使ったことないんだけどそういう仕様なの?
仕様なら仕方ないが信じがたいんだがw

334:デフォルトの名無しさん
08/04/04 01:58:38
C++はこうだろ?

std::complex<double>(1, 3)

335:デフォルトの名無しさん
08/04/04 02:10:39
complexをiostreamで出力するときに、
"1+2i"じゃなくて"(1,2)"となっているのは何で?
ってことだろ。

336:335
08/04/04 02:12:00
× complexをiostreamで出力するときに、
○ complexをiostreamで入出力するときに、

337:デフォルトの名無しさん
08/04/04 02:23:09
コピペして使えるようにじゃね?

338:デフォルトの名無しさん
08/04/04 02:41:24
335の人が言っているのが、こっちの意図です。でも最初の人がC言語ではサポートしていない、
というのがどういう意味だったのかはわかりました。
文字列で扱うんなら、4+5iとかでも問題ないと思ったのですが、(,)で実装してしまったし、、、
4+5iとかはちょっと面倒くさそう。



339:デフォルトの名無しさん
08/04/04 07:40:38
iだったりjだったりするからじゃねw

340:デフォルトの名無しさん
08/04/04 12:05:27
テンプレートクラス作って、
そのポインタをlistにつっこんで
イテレータで走査しようとしたら怒られる

//Error
list<Hoge<T>*>::iterator it;

expected `;' before "it"

テンプレートクラスを
テンプレートのままぶち込むのがいけないのか、
それとも別のところがいけないのかでいいんで教えてください

341:デフォルトの名無しさん
08/04/04 12:30:31
- list<Hoge<T>*>::iterator it;
+ typename list<Hoge<T>*>::iterator it;

342:デフォルトの名無しさん
08/04/04 12:34:55
ああ、そういうことだったのね(´・ω・`)

ありがとー

343:デフォルトの名無しさん
08/04/04 12:35:00
>>340
そりゃ型決まってないと無理でないか?
list<Hoge<int>*>::iterator it;
とかならいけると思うけど。


344:デフォルトの名無しさん
08/04/04 12:41:23
gccだとちゃんとエラーはいてくれるがVCだと通るから困る

345:デフォルトの名無しさん
08/04/04 15:28:40
を、2ページ目にも修正入ったみたいだな。

346:デフォルトの名無しさん
08/04/04 16:45:18
教えて!!
言語を勉強したいのだが何がお勧め??
C++??Java??

347:デフォルトの名無しさん
08/04/04 16:46:17
目的は?
趣味なら何でもいいと思うよ。

348:デフォルトの名無しさん
08/04/04 16:47:57
>>346
BASIC

349:デフォルトの名無しさん
08/04/04 16:51:06
>>347
>>348
仕事でUNIXのオペレータをしています。
言語を覚えてスキルアップしたい。と思っています。
でも色んな言語がありすぎて何を始めればいいのか
分かりません。今の時代にあっていてこれからも使っていけそうな
言語を教えて下さい。お願いします。

350:デフォルトの名無しさん
08/04/04 16:53:20
>>346
スレタイが読める程度の日本語。

351:デフォルトの名無しさん
08/04/04 16:53:45
UNIXならまずはシェルスクリプトからはじめてみては?
で、awk&sed、perl、python or rubyと進むとか。

352:デフォルトの名無しさん
08/04/04 16:57:41
C/C++のスレで訊かれたなら、やっぱりC/C++と答えるべきか

353:デフォルトの名無しさん
08/04/04 16:58:14
C#といってみる

354:デフォルトの名無しさん
08/04/04 16:59:02
C++では簡単に出来てJavaでやりにくい事
その逆などを教えて下さい。

355:デフォルトの名無しさん
08/04/04 17:03:38
その手の質問はぐぐったほうが丁寧な解説出てくるよ
ここで聞いてもすれ違いのうえ端的だったり極端すぎる答えしか返ってこないよ

356:デフォルトの名無しさん
08/04/04 17:15:06
初心者のためのプログラミング言語ガイド Part7
スレリンク(tech板)

357:デフォルトの名無しさん
08/04/04 20:28:22
初心者はまずこれを読んで
ポインタを理解すること

URLリンク(builder.japan.zdnet.com)


これができない奴はC/C++いじるの辞めろ
適正が0かマイナスだ

358:デフォルトの名無しさん
08/04/04 20:58:48
>>94

359:デフォルトの名無しさん
08/04/04 21:22:45
それ1週間前のネタ

360:デフォルトの名無しさん
08/04/04 21:50:48
C++にポインタ排卵だろ

361:デフォルトの名無しさん
08/04/04 21:57:43
まあ大部分は排除できるな。

362:デフォルトの名無しさん
08/04/04 22:21:10
constメソッドからでもポインタ型メンバの参照先なら操作し放題とか駄目活用している

363:238
08/04/04 22:32:21
protectedでstaticな独自クラスの配列の参照の初期化で他のクラスのメンバ変数を与えたいんですが
無理ですよね・・・?
もし他のクラスのstatic変数なら大丈夫でしょうか?

364:デフォルトの名無しさん
08/04/04 22:36:38
RTTIは実際にどういう場面で使われるんですか?

template<typename T> void hoge(const T &a) {
  if (typeid(a) == typeid(int)) { ... }
}

とかやるんですかね

365:デフォルトの名無しさん
08/04/04 22:37:35
クラスのインスタンス自身への参照ならいくらでも可能だと思うが、
その中のメンバ変数と言われると難しいというか、
そもそもそんな怪しい事しようとしている事にまず疑問を持たざるを得ない。

366:デフォルトの名無しさん
08/04/04 22:38:45
>>364
dynamic_cast も RTTI を利用してる。
typeid はあまり使う事は無いな。

367:デフォルトの名無しさん
08/04/04 22:54:27
dynamic_castなら、よくこういう状況で使いたくなる。
1. ライブラリの用意した基底クラスBから派生した自作クラスDを作る。
2. Dのインスタンスをライブラリに渡す。
3. ライブラリからのコールバックで2で渡したものがB型への参照・ポインタで与えられる。
この例だと結局boost::polymorphic_downcastにするんだけどね。

>>364
その例だったら特殊化で十分。

368:デフォルトの名無しさん
08/04/04 23:00:11
配列の参照のスタティックなクラス変数のクラス定義外での宣言って
Hoge Piyo::(&foo)[][100];
じゃないの・・・?

369:デフォルトの名無しさん
08/04/04 23:05:51
とりあえずコンパイルの通るコードを頼む

370:デフォルトの名無しさん
08/04/04 23:09:04
>>360

多態とか

371:デフォルトの名無しさん
08/04/04 23:09:50
スマートポインタでいい。

372:デフォルトの名無しさん
08/04/04 23:58:47
でいいというか、ポインタ使えないなら、ポインタもどきを使うしかない。
クラスがメンバに参照を持つとコンテナに突っ込めなくなってしまうので、
嫌でもポインタ使わなきゃならないと思うんだけど。



373:デフォルトの名無しさん
08/04/05 00:07:58
大体ポインタを理解できないならスマートポインタも理解できないかと
360は何を言いたかったのだろう

374:デフォルトの名無しさん
08/04/05 00:08:53
スマートポインタはアドレス演算とかやらないから
scoped_ptr くらいなら何とかなるんじゃね?

375:デフォルトの名無しさん
08/04/05 00:15:57
ダメな奴は、やり方が言語仕様に引っ張られる。

376:デフォルトの名無しさん
08/04/05 00:17:42
いやイテレータ使うならアドレス演算と大して変わらないんじゃないか
ポインタわからないようではC++できないというのは真実だと思うけど

377:デフォルトの名無しさん
08/04/05 01:24:51
排卵日

378:デフォルトの名無しさん
08/04/05 03:16:18
メンバ変数の文字列の一部を新しい文字列として返したいんですが
どういう方法がありますか?

こういうのです

class Test {
private:
 char data[256];
public:
 char * getStr()
 {
  char *ret = new char[3];
  ret[0] = data[0];
  ret[1] = data[1];
  ret[2] = data[2];
  
  return ret;
 }
};

これを

std::string str = getStr();

このように使った場合retのデリートができないので
メモリリークしますよね?何かいい方法ありませんか?

379:デフォルトの名無しさん
08/04/05 04:35:02
const std::string getData() const { return std::string( data ); }

380:デフォルトの名無しさん
08/04/05 06:48:36
終端に '\0' を追加するのも忘れずに

381:デフォルトの名無しさん
08/04/05 08:04:56
クラスがメンバに参照を持つとコンテナに突っ込めなくなってしまうので、

382:デフォルトの名無しさん
08/04/05 08:49:39
void getStr(std::string& str) const {
 str.assign(data, 3);
}
std::string getStr() const {
 return std::string(data, 3);
}

後者は代入する時にコピーが発生するので場合によっては効率悪いが
(初期化の場合は大抵のコンパイラなら戻り値最適化してくれるので大抵コピーは発生しない)、
かといって前者は必ず変数用意しないといけない。

どっちにするか、あるいは両方用意するかはお好きなように。


まあ、string にどんなメンバがあるかくらい見とけ。
URLリンク(www.wakhok.ac.jp)

383:デフォルトの名無しさん
08/04/05 10:43:49
>>381
参照のようなconstなメンバー変数を持つとコピーコンストラクタが書けない
一方ほとんどのコンテナはメモリ確保を自動でするからコピーが発生する
常識だと思ってたんだけどどこかおかしいのか

384:デフォルトの名無しさん
08/04/05 10:53:24
デフォルトコンストラクタが書けないと言った方が正しいか

385:デフォルトの名無しさん
08/04/05 11:06:11
コピコンは書けるだろ?
書けないのは代入演算子。

386:デフォルトの名無しさん
08/04/05 12:09:51
終了文字の\0って入れなきゃいけないんでしょうか。
サンプルで\0を使っているコードを\0消しても正常に動作するんですが。

387:デフォルトの名無しさん
08/04/05 12:14:40
BCCで「異なる ~型へのポインタが混在している」って出るんですが、
これってどうすれば解決できるんでしょう?
箇所は
vsprintf(unsigned char*,const char*,va_list);
って使ってるところなんですが、unsignedのポインタからsignedのポインタにはキャストできないって言われたし・・・

388:デフォルトの名無しさん
08/04/05 12:14:41
>>386
コードによる。サンプル晒せ。
実はどこかで\0が付いているだけかもしれない。

389:386
08/04/05 12:28:09
>>388
これです。
int CreateSave() {
HANDLE hFile;
SYSTEMTIME st;
TCHAR szTime[128];
TCHAR *lpszBuf;
DWORD dwAccBytes;
DWORD dwSize = 0L;
       HGLOBAL hMem;
DWORD dwLen;

GetLocalTime(&st);
wsprintf(szTime,_T("\r\nファイル作成時: %d年%02d月%02d日%02d時%02d分%02d秒"),
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);

dwLen = (DWORD)lstrlen(szTime);


390:386
08/04/05 12:28:48
続き

hFile = CreateFile(_T("ファイルログ.txt"),GENERIC_READ, 0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
dwSize = GetFileSize(hFile, NULL) + dwLen;

hMem = GlobalAlloc(GHND, sizeof(TCHAR) * dwSize + 1);
lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL);
CloseHandle(hFile);
lstrcat(lpszBuf, szTime);
lpszBuf[dwSize] = '\0';
hFile = CreateFile(_T("ファイルログ.txt"), GENERIC_WRITE, 0,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hFile, lpszBuf, (DWORD)lstrlen(lpszBuf), &dwAccBytes, NULL);
CloseHandle(hFile);
GlobalUnlock(hMem);
GlobalFree(hMem);

return -1;
}

391:デフォルトの名無しさん
08/04/05 12:30:09
>>387
(const signed char *)にキャスト

392:デフォルトの名無しさん
08/04/05 12:50:12
>>390
よく読んでないけどstrcat(lpszBuf, szTime);この時点で¥0がついてると思われ

393:デフォルトの名無しさん
08/04/05 12:58:53
>>391
constってことは第2引数にですよね?やったら同じエラーが2個に増えたんですけど・・・

394:デフォルトの名無しさん
08/04/05 12:59:59
constを破るキャストがあるんですが、あれがあったらconstの意味なくないですか?

395:デフォルトの名無しさん
08/04/05 13:04:11
constは破るためにある
だから const const charがあるだろ

396:デフォルトの名無しさん
08/04/05 14:33:43
>>390
lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL);
CloseHandle(hFile);
lstrcat(lpszBuf, szTime);
lpszBuf[dwSize] = '\0';

このあたりか。
何か無茶苦茶危険なコードに見えるんだけど。

hMem = GlobalAlloc(GHND, sizeof(TCHAR) * dwSize + 1);  ← dwSize 文字分のメモリを確保してるつもりのようだが、+1 の位置がおかしい(TCHAR が2バイトの時に領域が足りない)
lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL);  ← dwSize 読み込む
CloseHandle(hFile);
lstrcat(lpszBuf, szTime); ← '\0' を付けないまま lstrcat は危険というか、szTime の文字数分領域がさらに必要なんだけどその領域を確保すらしていない
lpszBuf[dwSize] = '\0'; ← lstrcat の前に行う

397:デフォルトの名無しさん
08/04/05 14:35:01
しかも、lpszBuf[dwSize] = '\0'; じゃなくて lpszBuf[dwAccBytes] = '\0'; だな。

398:デフォルトの名無しさん
08/04/05 14:41:08
Unicodeビルドかどうかで、ファイルの文字コードまで
影響を受けるというのは良くない場合のほうが多いと思うけど、
それはいいのか?

399:デフォルトの名無しさん
08/04/05 15:57:43
何もひねらずに考えるとこうですが

if( n % 2 )
  printf( "奇数です\n" );
else
  printf( "偶数です\n" );

奇数か偶数か調べるもっともスマートなコードってどんなんですかね?


400:デフォルトの名無しさん
08/04/05 15:59:38
int isOdd(int n){ return n % 2; }

if( isOdd(n) )
  printf( "奇数です\n" );
else
  printf( "偶数です\n" );

401:デフォルトの名無しさん
08/04/05 16:00:21
スマートってのが読みやすいって意味ならそれでいいんじゃね?
スマートが短いって意味なら、いろいろあるだろうけど。

402:デフォルトの名無しさん
08/04/05 16:00:43
inline bool isOdd(int n) { return n % 2 != 0; }

403:デフォルトの名無しさん
08/04/05 16:07:03
下位1bitでも調べればいいんじゃね
スマートといえるかわからんけど

404:デフォルトの名無しさん
08/04/05 16:08:36
最下位ビット調べて0なら偶数

405:デフォルトの名無しさん
08/04/05 16:09:05
かぶった><

406:デフォルトの名無しさん
08/04/05 16:10:52
この程度なら最適化されないのかな?

407:デフォルトの名無しさん
08/04/05 16:23:00
まともなコンパイラならするよ。

408:デフォルトの名無しさん
08/04/05 17:00:52
std::string のfind()とfind_first_of()の違いって何ですか?
どちらも最初の位置を返すと思うんですが

409:デフォルトの名無しさん
08/04/05 17:04:02
findはコンテナから特定の要素を見つける。
find_first_ofはコンテナから特定のコンテナの要素を見つける。

410:デフォルトの名無しさん
08/04/05 17:21:25
std::string str("hogefugapiyo");
std::string::size_type find = str.find_first_of("abc");

"abc"のうち一番最初に見つかった要素の位置を返す
コンパイルが通るかは試してないのでわからん

411:デフォルトの名無しさん
08/04/05 18:17:44
質問です。
以下のような二つのコードの時間を計ってみたら、
コードBの方が早く、コードAはすさまじく重くなりました。
なぜでしょうか?
あと、コードAの方で、変数aをデバッグで値を見ると、
1.731e-040#DEN のように表示されます。
#DENとは何なんでしょうか?
よろしくお願いします。

環境はVisual c++ 2005です。

//コードA
for(int i =0; i< 5000; i++){
float a = 1.731e-040f;
float b = 1.731e-040f;
float the_test = a*b;
}

//コードB
for(int i =0; i< 5000; i++){
float a = 0.1f;
float b = 0.1f;
float the_test = a*b;
}

412:デフォルトの名無しさん
08/04/05 18:31:22
>>411
DENormal number (非正規化数)

FPUによっては非正規化数の演算をサポートしてなくて、
これをソフトウェア側でエミュレートしてる場合がある。
すると、パフォーマンスが落ちる原因になる。

413:じじ
08/04/05 18:57:43
MFCをつかったマルチスレッドプログラミングを仕事で要求されているの
ですが、APPクラスの子レッドとしておくのがいいのでしょうか?

414:デフォルトの名無しさん
08/04/05 19:17:30
enum は ビットマスクしてもいいですか?

415:デフォルトの名無しさん
08/04/05 20:03:42
どうやったらうまくコーディングできるんだろう?
すぱげってぃーなコードになってしまう。やっぱり慣れるしかない?

以下サンプル

void binary_search(double x,double y,double *z)
{
int i;
double c,j;
j = 0.0000001;

for(i=0;y*y - 2 > j;i++)
{

if(x*x - 2 < 0 && y*y - 2 > 0)
{
c = (x+y)/2;
if(c*c - 2 > 0) y = c; else x = c;
}
binary_search(x,y,z);
}

*z = x;

}

再帰しまくりでサーセン。でもどうやったら再帰せずに実現できるだろう?
考えるのが面倒&考えても良く分からないので再帰に走る今日この頃。

416:デフォルトの名無しさん
08/04/05 20:04:37
無理に再帰を使わない方がスパゲティ化する。

417:デフォルトの名無しさん
08/04/05 20:11:04
再帰はスタックで実現している。

418:デフォルトの名無しさん
08/04/05 20:12:39
>>415
何がしたいんだよ?

binary_search(x,y,z);

//binary_search(x,y,z);

419:デフォルトの名無しさん
08/04/05 20:21:12
バイナリサーチをバイナリデータのサーチと勘違いしてたりして
変数一文字でコメントもなくて通じると思ってるんだろうか

420:デフォルトの名無しさん
08/04/05 20:29:23
binary search じゃなくて bisection method の間違いだったわ
恥ずかしい。。。。鬱だしのう orz

421:デフォルトの名無しさん
08/04/05 22:55:05
これが日本のITレベルだ


スレリンク(prog板:43-44番)

くずばっかw

422:デフォルトの名無しさん
08/04/05 23:05:51
>>421
すまん、記事のコメントと同じ事をいいたいのか
それとも、2ページ目の解説についていいたいのか
さっぱり分からないから、ちゃんと説明してくれないか?


423:デフォルトの名無しさん
08/04/05 23:06:44
x 日本
o IBM

424:デフォルトの名無しさん
08/04/05 23:37:02
内部に二次元配列をもつクラスから、instance[0][0]みたいな書き方で値を取得したいと思ってます。
double operator[][](int x, int y)
のような書き方は出来ないみたいなので、(コンパイル失敗しました)、
この場合どうすればいいでしょうか?



425:デフォルトの名無しさん
08/04/05 23:47:13
要素数が100万くらいあるvectorを半分にして50万要素のvector2つにしたいのですが、
50万番目のiteratorを取得するのにiterator++ を50万回呼ぶ以外の方法はないのでしょうか。
vector<int>::iterator it=vec.begin()+vec.size()/2
とかいう感じだと演算子+は定義されていない、とかでダメなもんで。
この辺がポインタとの違いかなとは思うのですが。

426:デフォルトの名無しさん
08/04/05 23:50:06
επιστημη ってこんなところにも出没するんだな

427:デフォルトの名無しさん
08/04/05 23:54:19
>>425
std::advance

というか、+ は定義されているはずなのだが、
どんなコンパイラ使ってるの?

428:デフォルトの名無しさん
08/04/05 23:54:52
>>425
コンパイラ何使ってるの?
vector のイテレータはランダムアクセスイテレータのはずだから、
コンパイラの実装がおかしいだろ、それは。

429:デフォルトの名無しさん
08/04/05 23:55:08
>>425
vector<int>::iterator it= &vec[vec.size()/2];
みたいな感じでできないか?

430:デフォルトの名無しさん
08/04/06 00:01:24
>>429 それはダメ。ポインタとごっちゃになってる。

431:デフォルトの名無しさん
08/04/06 00:08:31
PCSX2というソフトをコンパイルしたいんですがやり方がわかりません。
プログラムについての知識0です。
勉強したいとかではなくこのソフトがほしいだけです。

Microsoft Visual C++ 2008をとりあえずインストールしましたがやり方がまったくわかりません。
サルにも判るように教えてくれる方がいれば幸いです。

URLリンク(www.pcsx2.net)

URLリンク(pcsx2.svn.sourceforge.net)

432:425
08/04/06 00:10:23
すみません。できました。どこかで間違った思い込みしてたみたいです。

433:デフォルトの名無しさん
08/04/06 00:23:40
>>430
ランダムアクセスイテレータはポインタ互換だと勘違いしてた
そういう実装が多いだけか

434:デフォルトの名無しさん
08/04/06 00:25:07
>>433
使用可能な演算子はポインタと同じだが、
ポインタとの間で相互変換することはできない。

435:デフォルトの名無しさん
08/04/06 00:26:14
ただし、ポインタもランダムアクセスイテレータの一種だけどね。

436:デフォルトの名無しさん
08/04/06 01:01:40
>>424
プロキシクラスを返す。
class A
{
public:
class Proxy
{
public:
double operator[](int y);
};
Proxy operator[](int x);
};

437:デフォルトの名無しさん
08/04/06 01:06:20
ポインタ返せるならそれでいいと思う。
範囲チェックしたければ何かクラス返すことになると思うけど。

438:デフォルトの名無しさん
08/04/06 10:48:56
>>431
スレ違いだということ、サルでも分かるかな?

439:411
08/04/06 12:00:53
>412
回答ありがとうございます。
遅くなる原因がわかり、勉強になりました。

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

440:デフォルトの名無しさん
08/04/06 12:57:53
>>436-437
ありがとうございます。
以下のような実装でいいですか? (あまりスッキリしてないような、、)
class test {
public:
test(int arg_size);
struct Proxy {
Proxy(int arg_size) : size(arg_size) {
vec.assign(size, 0.0);
}
double &operator[](int y) {
return vec[y];
}
std::vector<double> vec;
int size;
};
Proxy &operator[](int x) {
return proc_vec[x];
}
std::vector<Proxy> proc_vec;
int size;
};



441:デフォルトの名無しさん
08/04/06 13:36:20
ていうかよっぽどの理由が無いなら()演算子のでいいじゃん

442:デフォルトの名無しさん
08/04/06 14:08:59
クラスの中身の先頭にusing namespace ~;は書けないの?

443:デフォルトの名無しさん
08/04/06 14:11:20
>>441
なるほど、たしかに全然すっきり書けますね。
メンテもしやすそうだし、こっちにします。
ありがとうございます。

class Matrix {
public:
Matrix(int arg_size) : size(arg_size) {
vec.assign(size, std::vector<double>(size));
}
std::vector< std::vector<double> > vec;
int size;
double &operator()(int x, int y) {
return vec[x][y];
}
};



444:デフォルトの名無しさん
08/04/06 14:18:34
>>443
440でもそうだったけど、size変数って不要じゃね?

445:デフォルトの名無しさん
08/04/06 15:13:16
>>443
更にで何だけど、要素数のパターンが少なくて、定数でしか使わないなら要素数テンプレートにしちゃうと
ベクターも使わずに済むが・・・
用途分からんからしらね

446:デフォルトの名無しさん
08/04/06 15:15:45
エラー 1 error LNK2001: 外部シンボル ""private: static int Forms::Application::nCmdShow" (?nCmdShow@Application@Forms@@0HA)" は未解決です。 main.obj
ってどういう意味のエラーですか?

447:デフォルトの名無しさん
08/04/06 15:21:22
>>446
宣言だけされてて関数が定義されていない。


448:デフォルトの名無しさん
08/04/06 15:34:25
>>445
どうやるんですか?
要素は、二次元ベクトルなんですが、1000×1000要素くらいです。



449:デフォルトの名無しさん
08/04/06 15:36:35
>>446
プロジェクトのリンクするライブラリの設定で
必要な関数入ったLIBファイルを設定しわすれてるんじゃない

450:デフォルトの名無しさん
08/04/06 15:37:08
>>444
その通りですね。
size変数は消します。

451:デフォルトの名無しさん
08/04/06 15:46:43
>>448
vectorの要素数って変わるの?

452:デフォルトの名無しさん
08/04/06 16:25:26
>>448
横レスだが、こういうことだと思う。
template<int size_x, int size_y> class Matrix {
public:
double& operator()(int x, int y) { return v_[x][y]; }
private:
double v_[size_x][size_y];
};

1000×1000は大きいので、スタックには置けないけど。

453:デフォルトの名無しさん
08/04/06 16:43:03
よくみるLPクラス名って、そのクラスのポインタ型って事?

454:デフォルトの名無しさん
08/04/06 17:00:20
>>453 そういう名前付けの規則が昔はやってたんだよ。

455:デフォルトの名無しさん
08/04/06 17:02:13
ある天気予報サイトの三重県の天気情報の文字列だけを抽出して自分のホームページに乗せるプログラムを書きたいのですが、どういったことを勉強すれば良いのかご教示願えないでしょうか。宜しくお願いします。

456:デフォルトの名無しさん
08/04/06 17:13:54
>>455
・サイトにアクセスしてページを入手する
・ページを加工する
・自サイトに貼り付ける
WebProg板へどうぞ。

457:デフォルトの名無しさん
08/04/06 17:32:48
エラー 1 error C2143: 構文エラー : ';' が 'Forms::Application::frm' の前にありません。 application.cpp 7
エラー 2 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません application.cpp 7
エラー 3 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません application.cpp 7
エラー 4 error C2371: 'frm' : 再定義されています。異なる基本型です。 application.cpp 7
>>449
>>447
解決しました。
が、今度はこんなエラーが。
定義はしたんですが、今度は定義した場所でエラー吐くようになりました。

458:デフォルトの名無しさん
08/04/06 17:52:08
>>457

>>54-

459:デフォルトの名無しさん
08/04/06 19:44:31
ありがとうございました。
名前空間をちゃんと指定してなかったのが原因でした。

460:デフォルトの名無しさん
08/04/07 02:21:47
ヘッダに定義とか書けちゃうんだけど、
分けた方がええの?

分ける理由ってなんですか?

461:デフォルトの名無しさん
08/04/07 02:41:53
>>460
定義のほうをあらかじめコンパイルしてオブジェクトにしとける
小さいなら定義も一緒でいいだろ
boostとかにもそういうのあるよ

462:デフォルトの名無しさん
08/04/07 02:46:51
>>460
プログラムサイズが増えたり重複オブジェクトができたりコンパイルが通らなかったりする

463:デフォルトの名無しさん
08/04/07 02:49:17
ヘッダに関数書くならstaticつけるかファンクタにするかテンプレートにしとけよ。

464:デフォルトの名無しさん
08/04/07 02:54:18
こういう質問をする人のレベルだと、一番掴みやすいのはコンパイル時間の問題かなぁ。

>>460
たとえば、計10万行くらいあるソースファイル群のすべてが
直接or間接的にhoge.hppというヘッダファイルをincludeしているとして、
hoge.hppが実装まで全部書いてあるモノだったとすると、
その実装部分をほんの1行変更しただけで、10万行のソースファイル群が
すべて再コンパイルされることになる。
定義を別ファイルにしておけば、変更したときに再コンパイルするのはそのファイルだけで済む。

465:デフォルトの名無しさん
08/04/07 04:53:14
LinuxにおいてHDDの容量を取得したいのですがどの様にすればよいのでしょうか?

466:デフォルトの名無しさん
08/04/07 04:59:01
ただのグローバル変数とstaticをつけたグローバル変数って同違うんですか?

467:デフォルトの名無しさん
08/04/07 06:43:59
>>465
Linux板へどうぞ。ulimitでできるでしょ。

>>466
前者は文字通りGlobal。後者はファイルスコープなので違う翻訳単位からは見えない。
どちらにしても、可能な限り使わないに越したことはない。

468:デフォルトの名無しさん
08/04/07 07:14:53
>>464
>>463
>>462
>>461
ありがとう。
なんとなくわかった。

469:デフォルトの名無しさん
08/04/07 07:45:15
>>463
ヘッダに関数書くときに、static付けたり、ファンクタにしたり、テンプレートにしたりすると、
どういう点でいいですか?全然考えてませんでした。



470:デフォルトの名無しさん
08/04/07 07:59:53
関数が複数実体化されることを抑制できる。

471:デフォルトの名無しさん
08/04/07 12:23:30
★ 今世紀最大の大祭り!聖火を巡る障害物リレー 日本イベント来たる! ★

【目的】
 街中をオニが駆け巡ります。
 オニは聖火を持って移動します。これを消すのが目的です。

 ただし、今回は参加者が多いため難易度がはね上がりました。
 今回のみ、オニは壁役に守られながら走ります。
 壁役を突破して聖火を消せばゲームクリアとなります。

【ルール】
~勝ち~
 オニが持っている聖火を消すとその時点でゲームクリアとなります。
~負け~
 オニが若里公園まで逃げ切るとその時点でゲームオーバーとなります。

【日時    】 2008年4月26日(土)8:30スタート
【場所    】 長野県長野市
【ルート地図】 URLリンク(www.city.nagano.nagano.jp)
【詳細情報 】 URLリンク(www.joc.or.jp)
-------------------------------------------------------------
イギリスで行われたイベントの様子
URLリンク(jp.youtube.com)
フランスで行われたイベントの様子(1分30秒から)
URLリンク(jp.youtube.com)

『2ch大規模OFF会場』
スレリンク(offmatrix板)
スレリンク(offmatrix板)

『各国の競技結果』
URLリンク(ja.uncyclopedia.info)

472:デフォルトの名無しさん
08/04/07 18:43:10
四則演算ってさ、
char でも int でも double でもしてくれるが、
それってコンパイル時に適切にマシン語に変換してくれてるんですか?

CPUが持ってる算術演算の機能を使えるように
置き換えてるのであってCPUが int なのか char なのか判断して
処理してるわけではないですよね?

473:デフォルトの名無しさん
08/04/07 18:51:06
>>472
そうだよ
ないです

474:デフォルトの名無しさん
08/04/07 19:12:35
ただし格上げされて計算されるので種別はそんなに多くないです。

475:デフォルトの名無しさん
08/04/07 20:03:56
格上げ、というか汎整数拡張あたりじゃないのかな

476:デフォルトの名無しさん
08/04/07 22:26:22
とりあえず宿題スレの方で提出が終わったので、
自分なりに作ろうと思っているのですが、いきなり行き詰ってしまいました;
整数の場合8桁、負数の場合9桁、エラー仕様など、問題が山積みですが、
どうかご教授お願いします。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

477:476
08/04/07 22:28:20
#define buffersize 10ですね;

478:デフォルトの名無しさん
08/04/07 22:41:06
>>476
何がしたいんだ?宿題をといて自分なりに課題を拡張して勉強しようとしたのか?
そのテキストファイルを見せられても、課題を丸投げされているようにしか見えないが。

とりあえずバッファオーバーフローしてたり、いろいろまずいぞ。

479:デフォルトの名無しさん
08/04/08 10:55:17
URLリンク(www.nicovideo.jp)

この動画でやっている、画像ファイルをテキスト(AA)に変換は
どのようにやっているのですか?

480:デフォルトの名無しさん
08/04/08 11:03:12
動画にコード出てるじゃないか……

481:デフォルトの名無しさん
08/04/08 11:08:11
画像の輪郭抽出→予めこのパターンにはこの文字を使うというデータを登録しておく→
画像の上から順にパターン解析と文字割り当てを行う。

って感じしか思い浮かばん

482:デフォルトの名無しさん
08/04/08 11:08:35
>>480
初心者なもので・・・
画像を読み込んで、テキストに変換してさらにそれの色を判別してつけるのは
どの辺のコードを見たら良いのでしょうか?

483:デフォルトの名無しさん
08/04/08 11:19:20
今動画見てきたぜ。想像してたのと違ったぜ。とりあえずBMPを配列にするとこからはじめたら?
BMPのフォーマット↓凄く簡単だからすぐできるはず。
URLリンク(www.kk.iij4u.or.jp)
後は色に合わせて<font color="色">■</font>をひたすら出力すればできるだろ。
中級入門くらいじゃね?動かしたいならJavaScriptの解説かじればおk


484:デフォルトの名無しさん
08/04/08 12:38:37
>>476
とりあえず、どのあたりで困ってるのかな。?

mainに全部書くのではなく関数を作ってみよう。
引数をまとめれば、何をするべきかわかるんじゃないかな。


485:デフォルトの名無しさん
08/04/08 12:43:09
昔、先輩が「コンストラクタではnew使うな」と言っていたのを思い出したのだけど、
これってどういう意図なのでしょう。
一般的なルールなのか、特定の状況で有効な話だったのか……。

486:デフォルトの名無しさん
08/04/08 12:47:03
>>485
コンストラクタ内で例外が発生すると、デストラクタは呼ばれない (仕様)
→ new でコケたらリーク!

じゃね?
コンストラクタ内の例外は漏れなくコンストラクタ内で処置すれば無問題。

487:デフォルトの名無しさん
08/04/08 13:04:20
>>479
お絵かきとかでもあるネタだけど、むしろどうやって動画にしてる
のかの方が気になる。コーディング中ずっと録画してあとで編集
してるんだろうが…根性あるなw

488:デフォルトの名無しさん
08/04/08 13:17:33
コーディング中のキータイプを記録、編集

動画を取りながら記録したキータイプをマクロで動かす

(`゚'Д`゚')

489:デフォルトの名無しさん
08/04/08 13:24:03
>>479
画像を読み込んで表示するところから始めたらいい
結構親切っぽいから彼のサイトの掲示板で聞いてみれば
講座の方はかなり酷いスパゲティコードだからお勧めしないw

490:デフォルトの名無しさん
08/04/08 16:01:19
この講座、どんな感じ?

URLリンク(weblearningplaza.jst.go.jp)

491:デフォルトの名無しさん
08/04/08 18:21:58
cinからdoubleを1つまたは複数入力させます。入力されたのが1個なのか、複数なのか判定したいのですが、
以下のコードでよいですか?Macだとうごくのですが、windowsでもこれでいいのかわかりません。
double a;
std::cin >> a;
if (std::cin.peek() == '\n') {
// 数字は一個だった
}
else {
// 一個じゃなかった。
}


492:デフォルトの名無しさん
08/04/08 18:48:09
>>491
やってみりゃいいじゃない。

493:デフォルトの名無しさん
08/04/08 19:06:50
>>492
ありがとうございます。今手元にwindowsがないのです。
また、自分のところのwindowsでやってみて動いても、ほかの人のwindowsでは
どうなるかわからないし…
その、規格的に入力の文字列末判定はこれでいいのかどうか、知り痛いです。

494:デフォルトの名無しさん
08/04/08 19:10:04
>>485
VC8で大量にメモリの確保しているとコンストラクタの中のnewで「メモリが不足しています。」とエラーがでる。
理由が分からずallocにしたら問題なかった。
というか今も原因が掴みきれない件。

495:デフォルトの名無しさん
08/04/08 19:20:20
使う型がある程度限定できるテンプレートだったら
MyTemplate<型名>をtypedefしてしまえば良いような気がするけど
これってありなんですかね?


496:デフォルトの名無しさん
08/04/08 19:38:16
まさにstringとwstring

497:デフォルトの名無しさん
08/04/08 20:08:28
>>493
つボラギノール

498:デフォルトの名無しさん
08/04/08 21:56:33
>>495
あり。

499:デフォルトの名無しさん
08/04/08 21:59:56
ありあり。

500:デフォルトの名無しさん
08/04/08 22:04:32
ありありありあり。

501:デフォルトの名無しさん
08/04/08 22:05:12
ありが十匹で

502:デフォルトの名無しさん
08/04/08 22:14:19
さよならだ

503:デフォルトの名無しさん
08/04/08 22:23:50
アリーヴェデルチ

504:476
08/04/08 22:28:39
>>478
ですよね、失礼しました;

>>484
エラー仕様を作ろうとしたのですが、
【整数の場合最大8桁までを有効とし、9桁以降を無視する。
 負数の場合は、最大9桁までを有効とし、10桁目以降は無視する。】とあり、
【『-』のみ、または改行のみ入力されたらエラーメッセージを表示し、終了】
というのもあるので、
エラーとしては if(a[0]=='\n')  if(a[1]=='-' && a[0]=='\n')
みたいなのを使えばいいのかなぁ、程度で考えてるのですが、
どこに入れればいいのかなどイマイチ判らないのです;

505:デフォルトの名無しさん
08/04/08 22:34:19
ひょっとしてその数え方だと、「-1」は2桁なのか?

506:476
08/04/08 22:53:28
>>505
私的にはそういう風に考えてます;

507:デフォルトの名無しさん
08/04/08 22:54:05
>>486
なるほどー例外ですか。それは思い浮かばなかった。
newしたときの初期化の処理が無駄だったりするのかとか当時考えたのを思い出した。

508:デフォルトの名無しさん
08/04/08 23:02:41
>>504
whileを抜けて
>if(a[0]=='\n')  if(a[1]=='-' && a[0]=='\n')
の場合にreturnで終わればOK
returnの前にprintfで適当にエラー出せば目的のものになるだろ。
>どこに入れればいいのかなどイマイチ判らないのです;
どこに入れてダメだったんだ?

509:デフォルトの名無しさん
08/04/08 23:09:47
classのなかにnamespaceは作れますか?

510:デフォルトの名無しさん
08/04/08 23:19:28
muri

511:デフォルトの名無しさん
08/04/09 03:14:20
質問なのですが、(VC++ 2008 EE を使用しています。)

以下のコード。

COORD coord;
HANDLE hConsoleStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsoleStdOut, coord);

は、<windows.h>をインクルードして使える、というのは判断できますが、
これはwindowsプログラミングなのでしょうか?
WinMain()関数も無いし、DOSで表示されるのですが、
こういったコードの総称は何と呼ばれているのですか?

説明下手で申し訳ないです。

512:デフォルトの名無しさん
08/04/09 03:17:27
WindowsのAPIに依存してるならどう考えてもWindowsプログラミングだと思うが…。

513:デフォルトの名無しさん
08/04/09 03:39:45
WindowSystem(≒GUI)プログラミングではないが、
(MS-)Windowsプログラミングだな。
ついでに言えば、コンソールウィンドウはDOSではない。

514:デフォルトの名無しさん
08/04/09 04:02:03
>>512
>>513

ありがとうございます。
この「COORD coord;」や「HANDLE」の意味が解らず、
じゃあ総称が判ればネットで検索できる、と思い至ったのですが、
ネットを見ても、C言語による(MS-)Windowsプログラミングが掲載されていないんですよね。
はぁ。。。

515:デフォルトの名無しさん
08/04/09 05:19:59
>>514
日本語訳は無いけどMSDNに載ってるよ。

516:Alexander The Great WAS ALBANIAN, the PROOF by Flamuri
08/04/09 06:53:32
URLリンク(www.youtube.com)

517:デフォルトの名無しさん
08/04/09 07:30:25
>>507
ちゃんと delete すれば問題ない。
例外を一旦コンストラクタ内でキャッチして delete するのもいいが、
スマートポインタに入れておけばあとはデストラクタが勝手に何とかしてくれる。

コンストラクタ内で例外が発生した場合に呼ばれないデストラクタは
構築中のオブジェクトのデストラクタだけだからね。
既に構築されたオブジェクトのデストラクタは全て呼ばれる。
例えば基底クラスのデストラクタとか
構築されたメンバ変数のデストラクタとかは全て呼ばれる。

new に関して気をつける必要があるのは事実だけど、
使っていけないってことはあり得ない。
まあ、初心者は使わない方が無難ってこと程度の話じゃないのかな。

518:デフォルトの名無しさん
08/04/09 09:01:29
いいえ、newを生で使っている人はちゃんとスキンをつけるようにしてください。

519:デフォルトの名無しさん
08/04/09 09:26:43
newに限らず例外を投げる可能性のある関数をコンストラクタ内で
呼び出すときはstack unwindを考えて対応する。

520:デフォルトの名無しさん
08/04/09 09:32:36
コンストラクタ内でnewが例外吐いたのをキャッチしたとして、
そのあと何をすれば良いのですか?

521:デフォルトの名無しさん
08/04/09 09:38:26
>>520
ケースバイケース
スワップが頻発してるなどメモリ不足でシステムがヤバイ状態なら
終了してシステム全体のシステムの再考。
そのエラーを無視してでも少しでも長く生き続ける必要が条件なら
ログにでも吐いて続行。

522:デフォルトの名無しさん
08/04/09 11:47:43
VC++2008EE
ListBoxの1行削除ができたので、今度は削除前に
メッセージボックスを出して見ようとしたのですが、
エラーがものすごい数出てしまいました。

System::Windows::Forms::DialogResult result;
result = MessageBox::Show("削除しますか?","DELETE CHECK",MessageBoxButtons::YesNo);
Debug::WriteLine(result);
if(result != System::Windows::Forms::DialogResult::Yes)){
return;
}
if文全体を削除すると問題なく動作し、
また、出力ではYes,No確認できるので、
if文のSystem::Windows::Forms::DialogResult::Yesが、
問題なのかと思い、"Yes"とかにしてみたのですがやはりエラーが出てしまいます。
これはなぜエラーが出てしまうのでしょうか

523:デフォルトの名無しさん
08/04/09 11:56:41
>>519
それコンストラクタ関係ないだろ。

524:デフォルトの名無しさん
08/04/09 12:00:08
>>522
それ.netじゃん
AfxMessageBoxかAPIのMessageBox使うべし

525:デフォルトの名無しさん
08/04/09 12:03:48
>>520
コンストラクタ内で catch なんて書かないでいいように RAII を徹底したほうがいい。

526:デフォルトの名無しさん
08/04/09 12:14:47
>>524
ひと目でわかる Microsoft Visual C++ 2008 アプリケーション開発入門
という本を読みながらやっていて、
本書はC++/CLIで書いてある。とあるので、たぶん.netというやつだとおもいます。

この本の通りにやるとエラーが出てしまい、
エラーの内容見てもよく分からなくて、
いろいろ試してたのですが、結局原因が分からず聞いてみました。

この本で使っているMessageBoxにはなにか問題があったりするんでしょうか

527:デフォルトの名無しさん
08/04/09 12:21:41
>>526
C++/CLIてのはC++でなんとか.net使いましょうよ・・・っていう仕様
.netだけならC#の方がいいし、速度的にC++ならC++/CLIしないでMFCかAPI使った方がいい

528:522
08/04/09 12:30:18
申し訳ありません。もの凄く下らないミスでした。
if(result != System::Windows::Forms::DialogResult::Yes)){
かっこが一つ多かったです・・・スレ汚しすみませんでした。

>>527
うう、本まで買って気合い入れてしまったため再スタートは辛いです。
とりあえずこの道進んで、あとから徐々に方向転換してみます。
ありがとうございました。

529:デフォルトの名無しさん
08/04/09 12:33:15
>>528
C++/CLIなら↓の方で聞いた方がいいよ

C++/CLI part3
スレリンク(tech板)

530:デフォルトの名無しさん
08/04/09 15:29:32
>>528
甘いな。俺は最初どの本買ったらいいかわかんなくて結局3冊目まで買ったぞ

531:デフォルトの名無しさん
08/04/09 15:36:05
MFCってまだ使われてるのか?

532:デフォルトの名無しさん
08/04/09 15:44:23
>>531
きみのPCのMFC関連のDLL等を全て削除して使用してみればきみの環境での依存度が分かる

533:デフォルトの名無しさん
08/04/09 15:46:40
>>532
滑ってるよ

534:デフォルトの名無しさん
08/04/09 15:52:50
マジレス

535:デフォルトの名無しさん
08/04/09 17:07:16
MFC関連のDLL、スタティックリンクするから無くても動いちゃうよ
(俺のアプリは)

536:デフォルトの名無しさん
08/04/09 17:14:37
CString m_combo = "notepad.exe";
WinExec((LPCSTR)(LPCTSTR)m_combo,SW_SHOW);
これアプリが起動しないんですけどなんでですか


537:デフォルトの名無しさん
08/04/09 17:23:00
LPCTSTRをLPCSTRに変換しているのが限り無く怪しい。
LPCTSTRを引数に取るShellExecuteか何かを使え。

538:デフォルトの名無しさん
08/04/09 17:30:01
WinExecが好きなんですけど変換は不可能ですか?

539:デフォルトの名無しさん
08/04/09 17:33:34
なら(LPCSTR)(CStringA)m_comboでどうだ。
あと、引数の少なさなら<tchar.h>の_tsystemがいいぞ。

540:デフォルトの名無しさん
08/04/09 17:35:33
っていうかWinExecはdeprecatedな扱いのAPIのような気がする。

541:デフォルトの名無しさん
08/04/09 17:37:24
struct hoge_a{
int a;
int b;
};

struct hoge_b : public a{
int c;
int d;
};

としたとき、hoge_aのメンバのメモリ上の並び順はabとなるのは保証(規定)されていると
どこかで見た記憶があるのですが、hoge_bの場合、abcdとなることは保証されるのでしょうか?

542:デフォルトの名無しさん
08/04/09 17:54:09
>>539
動いたwお前すごいわ
どこにも乗ってなかったぞこんなの

543:デフォルトの名無しさん
08/04/09 18:27:43
srandのseedが同じ場合、マシンやOSが変わっても同じ乱数を発生させることができるのでしょうか?

544:デフォルトの名無しさん
08/04/09 18:32:25
>>543
No

545:デフォルトの名無しさん
08/04/09 18:42:27
そうすると何に依存するのでしょうか?
コンパイラですか?それともOSですか?
AMDとintelのようにCPUが変わっただけでもダメですか?

546:デフォルトの名無しさん
08/04/09 18:44:58
libcの実装次第?
時間と空間を使えばかなりランダムになりそうだけどなぁ。

547:デフォルトの名無しさん
08/04/09 19:10:37
>>543
移植性を考えるなら同じ種で同じ乱数列の出力を保証するにはライブラリに頼らず乱数発生器も実装してしまう

548:デフォルトの名無しさん
08/04/09 19:46:10
C++について質問なのですが、
オブジェクトを作らずにメンバ関数を呼び出すことは可能でしょうか。

549:デフォルトの名無しさん
08/04/09 19:49:19
静的メンバ関数なら。

550:デフォルトの名無しさん
08/04/09 19:54:24
>>548
できる。

struct a{ void f(){} };
reinterpret_cast<a*>(NULL)->f();

551:デフォルトの名無しさん
08/04/09 20:06:20
なるほど。勉強になりました。
レスありがとうございました。
#include <stdio.h>

class A
{
public:
static A* make_obj(void);
void my_puts(void){ puts("Hello\n"); }
};

A* A::make_obj(void){
A* a = new A;
return a;
}

int main()
{
A* a = A::make_obj();
a->my_puts();
return 0;
}

552:デフォルトの名無しさん
08/04/09 20:12:24
>>550
やめなさい

553:デフォルトの名無しさん
08/04/09 20:36:54
>>551
わかってると思うけど生ポではなくスマポに入れて返しとけよ

554:デフォルトの名無しさん
08/04/09 21:09:35
using namespace ~;
は取り消せますか?

555:デフォルトの名無しさん
08/04/09 21:16:28
永遠に取り消す事が出来ない呪いです。
using は計画的に。

556:デフォルトの名無しさん
08/04/09 21:24:07
namespaceをusingすると、そのnamespace内のusingまで見えてしまうのには泣く。意味ねーじゃん


557:デフォルトの名無しさん
08/04/09 21:27:35
だからヘッダにusing書いちゃ駄目ってママ言ったでしょ

558:デフォルトの名無しさん
08/04/09 21:30:57
>>550
staticメンバ関数が無い時代の苦肉の策ですなあ。
ただ非静的メンバーは参照できない。

559:デフォルトの名無しさん
08/04/09 21:31:50
turboPascalのusing見たいな使い方したかったのに。

560:デフォルトの名無しさん
08/04/10 00:22:01
VC++ 2008 EE でWindowsアプリケーションを作成したいのですが、
そのまま<windows.h>をインクルードしてもエラー表示なので、
どのような設定が必要なんですか?

561:デフォルトの名無しさん
08/04/10 00:24:06
>>548
なんのためのメンバ関数なんだか。

562:デフォルトの名無しさん
08/04/10 00:33:29
>>561
いや、他人の書いたコードを解読してるんだ。。

563:デフォルトの名無しさん
08/04/10 00:39:03
>>560
[ファイル]-[追加]-[新しいプロジェクト]
[Visual C++]-[Win32]-[Win32プロジェクト]-[プロジェクト名]-[OK]
[次へ]-[Windowsアプリケーション]-[■空のプロジェクト]-[完了]
[ソースファイル]-[追加]-[新しい項目]
[Visual C++]-[コード]-[C++ファイル]-[ファイル名]-[追加]

564:デフォルトの名無しさん
08/04/10 01:46:59
>>563
ありがとうございます。3行目まではうまく設定できたのですが、
4行目の「ソースファイル」?が何を指しているのかわからず、
そのまま5行目の作成を行いました。
結果はやはりビルドエラーです。
コードは以下です。

LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);

/* アプリケーションエントリーポイント */
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR CmdLine,
int CmdShow)
{
   //処理

return ;

}

/* ウインドウプロシージャ */
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
//処理
}
return DefWindowProc(hwnd,message,wparam,lparam);
}

565:デフォルトの名無しさん
08/04/10 01:50:01
エラーの内容は?

566:デフォルトの名無しさん
08/04/10 01:54:31
ファーストへの悪送球。

567:デフォルトの名無しさん
08/04/10 01:54:45
1>------ ビルド開始: プロジェクト: C800, 構成: Debug Win32 ------
1>コンパイルしています...
1>MJ_1.cpp
1>.\MJ_1.cpp(26) : error C2440: '=' : 'const char [6]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>.\MJ_1.cpp(41) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>C800.cpp
1>.\C800.cpp(28) : error C2440: '=' : 'const char [6]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>.\C800.cpp(43) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>コードを生成中...
1>ビルドログは "file://d:\My Documents\Visual Studio 2008\Projects\C800\C800\Debug\BuildLog.htm" に保存されました。
1>C800 - エラー 4、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

です。

568:デフォルトの名無しさん
08/04/10 02:02:15
>>567
なぜコンパイルエラーの部分を省略する。
ググればいろいろ見つかる。
URLリンク(www.google.co.jp)

569:デフォルトの名無しさん
08/04/10 02:21:14
>>568
ありがとうございます。
文字変換だったのですね。
しかしググっても出てこないので最後に嘆きます。

1>------ ビルド開始: プロジェクト: GAME, 構成: Debug Win32 ------
1>マニフェストを埋め込んでいます...
1>.\Debug\GAME.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. U_U!$kLdK
1>~[
1>ビルドログは "file://d:\My Documents\Visual Studio 2008\Projects\C800\GAME\Debug\BuildLog.htm" に保存されました。
1>GAME - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

なるエラーが出るのですが、まったく意味不明です。

570:569
08/04/10 18:46:06
申し訳ないです。
自己解決しました。
ありがとうございます。

571:デフォルトの名無しさん
08/04/10 21:45:49
VC++2005で、ADOでSQLSERVER2005に接続して、binary型のフィールドに
1000byte程のバイナリデータを保存したいのですが、
long型の配列にデータをmemcpyし、それをrs->Updateしようとすると、
コンパイルで「bool値に変換します」というような警告がでて、データを転送できません。
バイナリデータを転送するにはどのようにすればいいのでしょうか?
(配列には正常にデータがコピーされていることはファイル出力で確認できております)


572:デフォルトの名無しさん
08/04/11 00:26:01
>>571
URLリンク(support.microsoft.com)

573:デフォルトの名無しさん
08/04/11 06:15:26
vector〈基底クラス*〉に数種類の派生クラスをプッシュバックしてオーバーライドした関数を実行するようなことはできますか?

574:デフォルトの名無しさん
08/04/11 06:18:09
>>573
virtualなメンバ関数を実行ということなら、可能です。

575:デフォルトの名無しさん
08/04/11 06:33:22
もちろん仮想関数にしてあります
&の付け忘れでした

解決できましたありがとうございます

576:デフォルトの名無しさん
08/04/11 06:38:48
>>573=>>574=>>575

577:デフォルトの名無しさん
08/04/11 06:50:20
573=574=575=576

578:デフォルトの名無しさん
08/04/11 07:17:15
>>575
メモリリークに気をつけような。
boost::ptr_vector の使用も検討してみるといい。

579:デフォルトの名無しさん
08/04/11 12:34:50
動的に二次元配列を確保するにはどうすればよいですか?
int x=10; int y=10;
double a[x][y];
という風に書くのは、xyが小さい間は出来たのですが、newで確保しようとすると
yを変数にできません。vectorを使わずに上記のようなことができるでしょうか?
よろしくお願いします。


580:デフォルトの名無しさん
08/04/11 12:37:06
double **a;

*a = new double[x]

for( int i = 0; i < x; ++i )
 a[x] = new double[y]

こんなん

581:デフォルトの名無しさん
08/04/11 12:47:33
boost::multi_arrayオススメ。

582:デフォルトの名無しさん
08/04/11 12:52:43
>>580
ありがとうございます。
確保した二次元配列をほかの関数に渡すにはどうすればよいですか?

あと、boost::multi_arrayは速いですか?
今書いているのは、std::vectorもあまり知らない人に見せるためなので、
boostなんてとてもだめです。


583:デフォルトの名無しさん
08/04/11 12:57:05
アセンブリ言語のコンパイラのCソースプログラムを持っているのですが、
アセンブリ言語をコンパイルするには、このソースをコンパイルしてから
どうすればいいのでしょうか?

584:デフォルトの名無しさん
08/04/11 12:58:11
void func( int **a );
これでわたせるんじゃね、多分

585:デフォルトの名無しさん
08/04/11 13:06:03
>>582
そういう初心者には、素直に一次元配列を仮想化して使う方がいい。
こんな関数でも用意すればアクセスするのも割と簡単だ。
static unsigned offset(unsigned x, unsigned y, unsigned w)
{
return x + y * w;
}
勿論、メモリ確保はこうなる。
double * a = new double[w * h];
あー、ついでに言えば>580はバグだらけだから要注意で。
つーか、>584もかすだわ。

586:デフォルトの名無しさん
08/04/11 13:06:38
>>583
Cソースをコンパイルしてできた実行ファイルを実行してアセンブルすれ
ばいいのでは。



587:デフォルトの名無しさん
08/04/11 13:19:33
>アセンブリ言語のコンパイラ
有り得ない間違いだな。

588:デフォルトの名無しさん
08/04/11 13:29:33
>>580
これは酷い。

589:デフォルトの名無しさん
08/04/11 13:34:19
mbscmp
wcscmp
などの違いがわからない・・・・
あと、lstrcmp とか strcmp みたいなのもあったような気がするけど気のせい?
誰か、これらの関数の違いについて分かり易く教えてください。

590:デフォルトの名無しさん
08/04/11 13:40:56
文字として wchar_t を使うとき -> wcscmp
文字として char で mbcs を使うとき mbscmp
文字として char で sbcs を使うとき strcmp
文字として TCHAR を使うとき lstrcmp

ドキュメント読まずにまず2chで聞くという態度では、わからなくて当たり前。


591:デフォルトの名無しさん
08/04/11 13:49:11
>>590
すみません。それがいまいちよくわからないんです。
charを使うときとか、tcharを使うときと言われても抽象的すぎて???
具体的に、どういう処理をするときにmbscmp や strcmp などを使い分けるのでしょうか?
同じ文字列比較でも、mbscmp を使っていたり、 strcmp を使っていたりと、訳が分りません。

592:デフォルトの名無しさん
08/04/11 13:52:17
>>587
確かに…ご指摘ありがとうございます
アセンブリ言語を実行するものの意味で使いました

593:デフォルトの名無しさん
08/04/11 13:52:50
>>591
それは抽象的だからわからないんじゃなくて、勉強しないからわからないのです。
mbcs と sbcs の違いなんか、Google で 「mbcs と sbcs の違い」を(カッコははずして)
検索すればいくつもそれらしい説明のページが出てくるのです。

もし手抜きじゃなくてホントのホントに何もしないで知識が身に付くと思ってるのなら、
そもそもバカなので勉強しても無駄なので止めるべきです。

594:デフォルトの名無しさん
08/04/11 14:04:17
>>592
それは普通、アセンブラと呼ばれる。
いや、厳密に言えば「アセンブリ言語を翻訳するもの」だが。

595:デフォルトの名無しさん
08/04/11 14:05:02
>>593
なんか嫌なことでもあったのか?

596:デフォルトの名無しさん
08/04/11 14:05:03
なんとなく分ったような分らないような・・・・

同じ英数字からなる文字列比較でもプログラムによって使っている関数が違うのは
書き手(プログラマー)の意識の違いによる?
さらにワイド文字とマルチバイト文字の違いがよく分らん。。。。

出直してきます。スレ汚してすみません。

597:デフォルトの名無しさん
08/04/11 14:06:53
すまん
*a = new double[x]
じゃなくて
a = new double*[x]


598:デフォルトの名無しさん
08/04/11 14:20:42
>>597
それだけじゃねーだろ。

599:デフォルトの名無しさん
08/04/11 15:19:15
>>595
593じゃないけど、あえて言うなら「投げっぱなしの馬鹿を見てしまったこと」が
「嫌なこと」なんだろう。

600:デフォルトの名無しさん
08/04/11 20:21:49
deleteで落ちちゃうんだけど、原因わかりません><
このコードで落ちます・・・。

int i;
char *lpary[4];

for (i = 0; i < 4; i++){
lpary[i] = new char[256];
}

for (i = 0; i < 4; i++){
delete [] lpary[i];
}

誰か教えてください。

601:デフォルトの名無しさん
08/04/11 20:23:53
落ちる要素は特に見当たらないが・・・。
多分、他で色々やってる部分でマズいことやってんじゃないかと。

602:デフォルトの名無しさん
08/04/11 20:24:46

for (i = 0; i < 4; i++){
delete lpary[i]
}

delete[] lpary;


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch