【初心者歓迎】C/C++室 Ver.37【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.37【環境依存OK】 - 暇つぶし2ch331:デフォルトの名無しさん
07/05/19 03:10:37
>>327
興味を持ってるところに水を差して悪いが…

>クラスとかSTLのさわりのところまで
このレベルで「最新の仕様」を知る事に意味があるのか?
それならまだ知らないC++の基本を押さえるのが先じゃないか?

332:デフォルトの名無しさん
07/05/19 03:19:00
C系のを中断してLispとかHaskellあと言語そのものを作ったりとか
とかしばらくやっていたので
今度は今のC++らしいところが全体的に知りたいっていう
かんじなんです。
そのあたりの気分を理解していただけますでしょうか。


333:デフォルトの名無しさん
07/05/19 03:34:23
それなら安心して Effective C++

334:デフォルトの名無しさん
07/05/19 03:50:56
質問ですが、ワードパッドの[ファイル]メニューの[送信]コマンドのように
既存の標準電子メールソフトから送信用ウィンドウを呼び出す機能を実現するには
どうすれば良いのでしょうか?

335:デフォルトの名無しさん
07/05/19 03:53:49
gcc -pg でコンパイルしたらそれまで出てなかった
Detaching after fork from child process XXX
と言うメッセージ出るようになったんですけど、これは何ですか?なにか問題あるでしょうか?

336:デフォルトの名無しさん
07/05/19 05:25:39
>>334
「ファイル名を指定して実行」で
mailto::
やってみれ

337:334
07/05/19 06:52:25
>>336
忝い

338:304
07/05/19 07:10:12
>>305
答えてくれてありがとうございました。
が、関数とか全くと言っていいほど知らないので、書いてくださったコードは理解できませんでした・・・。
どうにか自分のコードをちょちょいと直してコンパイルエラー無くなるようにならないでしょうか?
もし良ければお答え下さい。

>>306
>JavaかC#でもやっていたのかもしれないけど
すみません、全くのプログラミング初めて2ヶ月の初心者です
配列の先頭要素のアドレスを渡すには配列名を書けばいい、と本に載っていましたが、それでいいんですよね?

関数内でいじった配列を、元のところに戻してやるとき、returnの後と、関数の戻り値の型はどう書けばいいのか教えてください;;

339:デフォルトの名無しさん
07/05/19 07:29:12
>>338
上手くいかないというのは、知識が足りていない事の証明。
解らないと思うなら、他人に聞く前に死ぬ気で調べなさい。
その方が自分のためだよ。

配列とポインタの関係について、ぐぐりつつ、テストコードを書きつつで、
ちゃんと基本を押さえれば、難しいことはないよ。

340:304
07/05/19 07:44:56
そうですね。甘えてました。
出直してきます。
ありがとうございました!

341:デフォルトの名無しさん
07/05/19 07:47:02
>>338
配列を関数で変更したいだけなら、例えばこれだけでいい。
void incrementArray(int * foo, unsigned nFoo)
{
for (int ic = 0; ic < nFoo; ++ic) {
++foo[ic];
}
}
別の配列にコピーする場合も、関数で配列を新規に確保するのは判り難いからやめた方がいい。
void copyArray(int * bar, int const * foo, unsigned nFoo)
{
for (int ic = 0; ic < nFoo; ++ic) {
bar[ic] = foo[ic];
}
}

342:デフォルトの名無しさん
07/05/19 07:50:14
コピーのほうの仮引数名は
fooだのbarだの書かずにsrc,destにしようぜ。

343:デフォルトの名無しさん
07/05/19 07:51:54
Linuxでの初心者の質問です。
C++のstd::sort(v.begin(), v.end())のsort()の実装を見てみたいのですが、
どこをみればよいのでしょうか。
関数ポインタ2つだけを引数にしなくても、v自体を引数にする仕様の方が
自然な感じがするのですが。。。
どなたかよろしくお願いします。


344:デフォルトの名無しさん
07/05/19 07:55:20
>>343
それでは「配列」か「コンテナ」か、どれか一つの全体しかソートできない。
例えば、vectorの二番目からソートしたいかも知れない。

345:デフォルトの名無しさん
07/05/19 07:58:43
>>343
ディストリビューションによるけど、たとえば
/usr/include/c++/*/bits/stl_algo.h

渡しているのは関数ポインタじゃなくて、イテレータオブジェクトだよ。
範囲を指定できるようにしておけば、コンテナの全体をソートするのも
一部をソートするのも同じ使い方にできるから、いい設計。


346:332
07/05/19 08:48:50
>それなら安心して Effective C++

どうもありがとうございました。読んでみます。


347:デフォルトの名無しさん
07/05/19 09:15:15
>>327
入門的教科書の条件は満たさないが、規格書でも買っとけば?

348:デフォルトの名無しさん
07/05/19 09:18:23
>>330
変数の型が糞重たいコンストラクタ/デストラクタを持ってるクラスだったら重くなるだろうね。
まぁ環境による

349:デフォルトの名無しさん
07/05/19 09:20:24
mixiで暴れてる猫皇って何者?激しく不快なんだけど

C言語コミュ
URLリンク(mixi.jp)
初心者の為のC言語
URLリンク(mixi.jp)


350:デフォルトの名無しさん
07/05/19 09:36:21
>>327
今書いてるから待ってて。

351:デフォルトの名無しさん
07/05/19 10:14:01
執筆中かよw
いつ出版されるんだ?w

352:デフォルトの名無しさん
07/05/19 10:34:30
>>350に期待

353:デフォルトの名無しさん
07/05/19 10:37:36
>>327
その本俺持ってるけど、初心者には詳しく書きすぎてあって読んでいる
うちに眠くなるよ。

独習C++などの問題集を一通りやってみてはいかがかな。あれなら
一冊やり終えた所である程度の力が付く。

354:デフォルトの名無しさん
07/05/19 15:19:22
>349
諦めとけ。
Kusakabe氏と猫王(猫皇)氏の参加コミュニティには近付かないが吉。

自分も「なるほど、考え方の違いですね」などと発言したら
「バカにするのもいい加減にしてください」とか返されてビックリですよ。詳細曖昧でごめん。

355:デフォルトの名無しさん
07/05/19 15:27:12
ミクシィ(笑)

356:デフォルトの名無しさん
07/05/19 15:30:09
2ch(笑)

357:デフォルトの名無しさん
07/05/19 15:32:14
独習C++、exceptional C++以外にC++の問題集ってありますか?

358:デフォルトの名無しさん
07/05/19 15:57:35
C with Classes 問題集

359:デフォルトの名無しさん
07/05/19 16:04:49
そのK氏、マイミクのマイミクなんだよなあ……
なんであんなキチガイと付き合いあるんだろうあの人。

360:デフォルトの名無しさん
07/05/19 16:43:19
A man is judged by the company he keeps.
類は友を呼ぶ。
キチガイの知り合いはキチガイ。

361:デフォルトの名無しさん
07/05/19 17:05:02
つまり359は無自覚のキチガイ

362:デフォルトの名無しさん
07/05/19 17:24:16
話題に対して関係ない人についての言及は思わぬ蛇を出させる

363:デフォルトの名無しさん
07/05/19 17:25:43
キューを配列で作りたいのですが
enqueue時にデータが一杯の時の処理が上手く出来ません
↓は自分で考えてみたものです
URLリンク(kansai2channeler.hp.infoseek.co.jp)
どこが悪いのか教えていただけないでしょうか
(headは先頭要素の一つ手前の要素数、tailは最後尾の要素の要素数)

364:デフォルトの名無しさん
07/05/19 22:20:21
>>363
デバッグくらい自分でしろよ。
デバッグの過程で学ぶ事は、プログラムを書く事以上にあるんだぞ。

365:デフォルトの名無しさん
07/05/19 23:20:06
わからないので書き込んだのですが…

366:デフォルトの名無しさん
07/05/19 23:21:09
わかってて書き込んでたらそれはさすがにまずいだろ

367:デフォルトの名無しさん
07/05/19 23:56:39
>>363
とりあえず、データが一杯の時に
「どういう動きにしたいのか」
「実際はどういう動きをするのか」
を、まとめてみるのはどうだろうか

368:デフォルトの名無しさん
07/05/20 04:20:25
友愛数を探すプログラム

「博士が愛した数式」で出てきた友愛数
友愛数の定義
URLリンク(ja.wikipedia.org)
Aの約数の和=B、Bの約数の和=Aのとき、A、Bは友愛数である
(ただし約数には自分自身を含めない)
例:220と284
220の約数の和=1+2+4+5+10+11+20+22+44+55+110=284
284の約数の和=1+2+4+71+142=220

とりあえず1,000,000まで探してみた。39組あった。
オイラーは60余り見つけたらしい。

が、いかんせん遅すぎる。(Athlon64 3500+で33分)
誰か高速化してくださいな。
ソース:URLリンク(kansai2channeler.hp.infoseek.co.jp)

高速化のポイント
・約数をもっとスマートに見つける方法はないか?(これがかなり遅い)
・10の約数の和が100になるわけないので本探索のjのループに無駄が多い
  かといって、どこまではしょっていいかわからない j = i / 2 ~ とか?
・あ、jをループにするから遅いんだ。yakuwaをソートして二分木探索すればいいんだ

369:デフォルトの名無しさん
07/05/20 06:55:55
100まで求めるやつらしい
URLリンク(www.saoyagi.net)

370:デフォルトの名無しさん
07/05/20 08:28:32
Aという起動中のプログラム(既存)のウィンドウを、Bというプログラム(自作)から開きたいです。
できるだけ簡単に開く場合はどんな方法がありますか?(SendMessage?)
Aのウィンドウはメニューから開くタイプでアクセラレータキーは付いていません。

371:デフォルトの名無しさん
07/05/20 08:39:58
std::vectorについて質問です。

#include <vector>

template <class T>
class test{
public:
test(T a){ data.resize(1); data[0] = a; }
const T& getData() const{ return data[0]; }
private:
std::vector <T> data;
};

int main()
{
test <bool> a(true);
a.getData();

test <int> b(0);
b.getData();

return 0;
}

boolで初期化された方にはVC8、GCC3.4共に、テンポラリのリファレンスを返すと怒られてしまいます。
boolとintでどのような違いがあるのでしょうか?
識者の方、ご教授お願いします。


372:デフォルトの名無しさん
07/05/20 09:06:18
>>371
Effective C++第18項

vector<bool>の返す型はbool*ではなくvector<bool>::reference型だから
参照は返せない。だから値で返すしかない。

const T& → const T

内部でプロキシオブジェクトを使っているのでアドレスが取れないため。

373:デフォルトの名無しさん
07/05/20 09:06:47
×Effective C++
○Effective STL

374:デフォルトの名無しさん
07/05/20 10:47:19
なるほど、vector< bool >にそんな事情があったとは。
const T& → const T にすると、vectorの中身によっては、
コピーが馬鹿にならない場合もあるので、この制約は嫌らしいですね。


375:デフォルトの名無しさん
07/05/20 11:02:00
>>374
一応補足しておくと、
const T となるのは vector<bool> ’のみ’ね

376:デフォルトの名無しさん
07/05/20 11:15:08
コピーが気になるなら、boost::call_traitsみたいな感じで
適切な戻り値の型を選ぶようにすればいいんじゃないかな。

377:デフォルトの名無しさん
07/05/20 12:06:05
>>370
C/C++、関係ナクネ?

プログラムAがどういう実装で新しいWindowを生成してるか
分からないとBからじゃ無理だと思うけど。

378:370
07/05/20 12:31:22
分かりにくくてすみません。

プログラムAはWindowsアプリケーションで、
TrackPopupMenu(ショートカットメニュー)からCreateWindowExでウィンドウを開いているようです。
プログラムBはC++(またはC)で作ります。

379:デフォルトの名無しさん
07/05/20 12:36:19
もうちょい詳しく。
てか、APIスレ行こうぜ

380:デフォルトの名無しさん
07/05/20 12:49:15
WM_COMMANDとメニューIDを
SendMessageで送りつければいいんじゃないの?

381:デフォルトの名無しさん
07/05/20 15:14:38
VC++のリストボックスについて、行き詰ってしまいまして、質問させて下さい。

環境はeMbedded Visual C++ 4.0 / windows CE です。
リストボックスにあるスクロールバーを使用せずに、別スクロールを付加させて、
リストボックスの動きを制御させています。
垂直スクロールに関しては、リスト数を取得して、スクロールバーで制御が出来るのですが、
水平スクロールがうまくいきません。。
リストボックス内では、文字列が途中までしか表示されておらず、
水平方向専用のスクロールバーを付加したのですが、
リスト内における表示位置(文字列の表示位置について)が取得&設定出来れば、
擬似スクロールが可能かな、と思ったのですが、取得することが出来ませんでした。
例えば、リストに水平スクロールをつけてしまい、そのスクロール部分を隠してしまい、
別スクロールから操作しているように見せかける、ということも考えたのですが、
その場合のリストについている水平スクロールの表示位置も取得できず。。。

もしかしたら、リストのスクロール位置が取得出来る方法があるのかもしれませんが、
申し訳ないのですが、調べたのですが、いまいち、探すことが出来ませんでした。
何かいい関数や処理がないかなぁ、、と行き詰っている状態です。
どなたか、いい方法をご存知の方がいらっしゃいましたら、教えていただけますでしょうか。
よろしくお願い致します。

追伸:もし、VC自体にそのような関数や処理方法がないのであれば、
別リスト(コピーリスト)を用意して、表示の仕方で擬似スクロールするように
見せかけるしかないのかなぁ。。。と悩み中です。。

382:デフォルトの名無しさん
07/05/20 15:56:47
switch文のcase句の条件を(ほぼ)同時に満たしたら下記の場合どうなるんでしょうか?

int nCount;
switch (a)
{
case1:
 nCount=0
 break;
case2:
 nCount=1
 break;
}


383:デフォルトの名無しさん
07/05/20 16:01:29
>>382
switchを通った時点の数値で評価される

384:デフォルトの名無しさん
07/05/20 16:01:57
一回で評価される式は1つ
つまりほぼ同時に満たすと言うのは
a == 0x01 && a == 0x02の時
これを満たすようなaは果たして存在するか?

385:デフォルトの名無しさん
07/05/20 16:17:17
switchとifは実行速度の面では一緒ですか?

386:382
07/05/20 16:18:06
>>384
case1とcase2をそれぞれ満たす違う値のaがほぼ同時に入ってくるということです。


>>383
でしたら下の場合nCountは3になるんでしょうか?
int nCount=3;
switch (a)
{
case1:
 nCount=0
 break;
case2:
 nCount=1
 break;
}

387:デフォルトの名無しさん
07/05/20 16:23:01
switch通過後にnCountの値が3になるのはaが1でも2でもない場合

388:デフォルトの名無しさん
07/05/20 16:23:04
>>386
>case1とcase2をそれぞれ満たす違う値のaがほぼ同時に入ってくるということです。

      ___    ━┓
    / ―\   ┏┛
  /ノ  (●)\  ・
. | (●)   ⌒)\
. |   (__ノ ̄  |
  \        /
    \     _ノ
    /´     `\
     |       |
     |       |

           ___   ━┓
         / ―  \  ┏┛
        /  (●)  \ヽ ・
       /   (⌒  (●) /
       /      ̄ヽ__) /
.    /´     ___/
    |        \
    |        |


389:デフォルトの名無しさん
07/05/20 16:23:06
>>368
素数を定数配列で持っとけ。1,000,000までの解を求めるんなら
1,000( == √1,000,000 )以下の素数データがあれば十分。
素数を定数配列使うのが邪道だと思う場合でもせめて素数だと
わかった値はどっかにプールしといて再利用しれ。

390:デフォルトの名無しさん
07/05/20 16:25:09
スコープの問題か
ブロックローカルのa、関数ローカルのa、クラスメンバのa、グローバルのa
と色々あっても優先順位がちゃんと決まってるから入る評価されるaは唯一つだよ

391:デフォルトの名無しさん
07/05/20 16:27:09
volatile変数なんだろ。

392:デフォルトの名無しさん
07/05/20 16:28:09
おーい誰かエスパー呼んで来い

393:デフォルトの名無しさん
07/05/20 16:30:33
まさかとは思って念のため >>382 のコードをコンパイルしてみたが
エラーもワーニングもでなくてワラタ。

>>382
case 1: と case1: じゃ全然意味が違うから気をつけてね♪

394:デフォルトの名無しさん
07/05/20 16:38:05
>>393
case 1のコロンがなくてもGCCでコンパイルできるよ

395:デフォルトの名無しさん
07/05/20 16:41:23
それはない。

396:382
07/05/20 16:43:20
混乱させてしまって申し訳ないです。
グローバルフックのコールバック関数で以下のようにしてて、
AとBのウィンドウがあって、Bのウィンドウがアクティブな時にAのウィンドウをアクティブにすれば
BのWA_INACTIVEとAのWA_CLICKACTIVEがほぼ同時に飛んでくるんではないでしょうか?
この場合nCountの値はどうなるんでしょう?

int nCount=0;
case WM_ACTIVATE:
 switch (lp->wParam)
 {
 case WA_ACTIVE:
 case WA_CLICKACTIVE:
  nCount--;
  break;
 case WA_INACTIVE:
  nCount++;
  break;
 }

>>382は文法めちゃくちゃでした。

397:デフォルトの名無しさん
07/05/20 16:47:19
queueがあるから同時じゃないよ

398:デフォルトの名無しさん
07/05/20 16:48:05
>>396
switch文の外にあるcase WM_ACTIVATE: は本当にエラーにならないか?

399:デフォルトの名無しさん
07/05/20 16:50:23
まずWA_INACTIVEが呼ばれて次にWA_CLICKACTIVEが呼ばれる。
つまり
nCount=0;
nCount++;
が実行されてから
nCount=0;
nCount--;
が実行される

400:デフォルトの名無しさん
07/05/20 16:55:31
breakしてるからfall-throughはしないんだろ?

401:デフォルトの名無しさん
07/05/20 16:56:30
>>400
お前さんも質問者の言ってることが解ってないようだが、
質問者はそんなレベルじゃない勘違いをしている。

402:デフォルトの名無しさん
07/05/20 17:00:15
まああれだ、変数(または関数)と値というものの区別がついてないんだな、たぶん

403:382
07/05/20 17:05:01
まだいくつか省略してますがどこがおかしいのでしょうか?

>>399
ありがとうございます。見直して成功したら報告させて頂きます。

404:デフォルトの名無しさん
07/05/20 17:40:32
>>385
コンパイラによってはテーブルジャンプにしてくれる場合もあるとか
まぁ環境によるので実測しなさい

405:デフォルトの名無しさん
07/05/20 17:46:27
>>404
それを言うならジャンプテーブルだろ、馬鹿w

それからコンパイラによってはっていうよりそもそも
ジャンプテーブルに変換する為のモンだぞ、switch は。
確かに状況により必ずしもジャンプテーブルになるわけじゃないが。

406:デフォルトの名無しさん
07/05/20 17:58:14
万単位の分岐をelse ifのはしごで書くと
結構はっきり違いが分かるらしい

407:デフォルトの名無しさん
07/05/20 18:02:51
そこまで作るのがここに何人(ry ごめんなさい妬みですorz

408:デフォルトの名無しさん
07/05/20 18:24:51
int型の整数の中に、任意の整数が含まれているか調べる方法ってありますか?
たとえば

int a = 1234;

があって、この中に3という数値が含まれてるかどうか、みたいな感じです。
文字列として扱ってしまえばできそうなのですが、intからcharにキャストすると
どうもおかしくなってしまって・・・

よろしくお願いします

409:デフォルトの名無しさん
07/05/20 18:26:00
sscanf

410:デフォルトの名無しさん
07/05/20 18:26:03
10で割って一桁ずつ見ていけばいいでしょ

411:デフォルトの名無しさん
07/05/20 18:26:56
sprintfしてstrchrで探すとか。

412:410
07/05/20 18:27:24
1の位を見るにはa%10

413:デフォルトの名無しさん
07/05/20 18:54:29
>intからcharにキャスト

toString()ではいかんのか?
(Cなら >411 だが)

414:デフォルトの名無しさん
07/05/20 18:55:38
itoa系列の関数を使うといい

415:デフォルトの名無しさん
07/05/20 19:02:24
itoa()は標準関数じゃないよ。

416:デフォルトの名無しさん
07/05/20 19:08:56
ごめんちゃい><

417:408
07/05/20 19:15:16
いろいろとどうもです
sprintfの存在を初めて知りました
それで挑戦してダメだったら1桁ずつ見ていきたいと思います

418:デフォルトの名無しさん
07/05/20 19:27:37
速度求めるなら一桁ずつ見る方法の方がいいよなO(N)未満だし

419:デフォルトの名無しさん
07/05/21 00:47:05
>>381 です。

なんとか、少しづつ進んでみたのですが・・・。
現状のリストについている水平スクロールの値は取得&設定できました。
でも、設定をすると、リストの水平スクロールは稼動するのですが、
リストは一緒に動いてくれません。
どうしたら、リストも一緒に動いてくれますか?

GetDlgItem(IDC_リストコントロール)->GetScrollRange(SB_HORZ ,&iMin,&iMax);
iTest = GetDlgItem(IDC_リストコントロール)->GetScrollPos(SB_HORZ);
GetDlgItem(IDC_リストコントロール)->SetScrollPos(SB_HORZ,iTest+5,true);

420:デフォルトの名無しさん
07/05/21 01:22:53
>>368
>>389
直観的方法だけど、
・必要な素数列を最初に求める。
・1は定義より含まれないことが自明なので2から始める(2も自明のような気がするけど)。
・任意の数の友愛数は二つ以上ないと仮定して(証明されてるのか知らん)、既に友愛数になった数はスルー。
・求めた素数列を使って素因数分解してから組み合わせを網羅して約数列を作る。
・約数列の合計を求めて元の数より小さければその数は既に調べているのでスルー(等しいということはないだろうけど一応含めてスルー)。
・そうでない場合はその数の約数列を作り合計を求めて元の数と比較し、一致していれば友愛数。
URLリンク(www.geocities.jp)
この方法だと>>368の環境で1000000まで30分どころか30秒もかからない(と思う。当方Pen4 2.53GHzで28秒)。

421:デフォルトの名無しさん
07/05/21 02:10:01
はじめて質問します。よろしくお願いします。
switch文で、int型の特定の値を入力するまで処理を繰り返すものを作っているのですが、
(1、2、のメニュー番号を入力するまで繰り返す、など)
int型(1)ではなく、1.0やaなど指定されたもの以外入力すると
無限ループになってしまい、処理を抜けることができません。
画面に表示された番号以外打ち込むなと言いたいところなのですが…。
これを避けるためにはどのようにcaseを設定したらよいのでしょうか?

よろしくお願いします。

422:デフォルトの名無しさん
07/05/21 02:45:59
default:

423:デフォルトの名無しさん
07/05/21 02:58:07
URLリンク(www.google.co.jp)

424:デフォルトの名無しさん
07/05/21 03:52:32
>>421
switchの前でscanf()を使って入力しているのなら、fgets()+sscanf()に変更してみることお勧め。

425:デフォルトの名無しさん
07/05/21 04:17:38
>>368
これで早くなってるはず
URLリンク(kansai2channeler.hp.infoseek.co.jp)

C7 600MHz で 30秒

426:デフォルトの名無しさん
07/05/21 04:40:48
O(N^2)台のアルゴリズムはまだかね

427:デフォルトの名無しさん
07/05/21 05:13:28
>>368
メモリ大量消費版
URLリンク(kansai2channeler.hp.infoseek.co.jp)

C7 600MHz で 10秒

428:デフォルトの名無しさん
07/05/21 10:11:00
>>368
>>427 のオーバーフロー耐性を強化
yakuwa[i]=yakuwa[i_copy]*(i/i_copy*j-1)/(j-1);

yakuwa[i]=yakuwa[i/j]+yakuwa[i_copy]*(i/i_copy);

429:デフォルトの名無しさん
07/05/21 13:18:08
定数の割り算は、かけ算に自動的に直されてしまうのですか?

430:デフォルトの名無しさん
07/05/21 13:23:44
>>429
そんな事はないけど大抵はコンパイラの最適化によってそうなる
理由は割り算よりかけ算の方が大抵のCPUで速いから

431:デフォルトの名無しさん
07/05/21 18:08:50
ツリービューコントロール等で項目が選択された場合に、何番目の項目が選択されたか調べたいのです。

WM_NOTIFYメッセージを捕まえて、何番目の項目が選択されているか調べているのですが、どうやら
この方法だとツリービューコントロールが選択される直前に選択されていた項目の値が返ってしま
います。

恐らくWM_NOTIFY以外のウィンドウメッセージを捕まえるべきなのでしょうが、どのメッセージを
捕まえればよいのでしょうか?

432:デフォルトの名無しさん
07/05/21 18:14:57
TVN_SELCHANGED

433:デフォルトの名無しさん
07/05/21 18:59:00
>>432
ありがとうございます。
しかしTVN_SELCHANGED メッセージはそのままでは取得できないんですね…。
色々と面倒そうですがやってみます。ありがとうございました。

434:デフォルトの名無しさん
07/05/21 19:02:47
WM_NOTIFY を捕まえてるのに、そのままでは取得できないってのは無いだろう。

435:デフォルトの名無しさん
07/05/21 19:21:13
>>434
すみません、リストビューの扱いを間違っていました。
ちゃんとTVN_SELCHANGEDでそのままメッセージを取得できました。
重ね重ねアドバイス感謝します!

436:デフォルトの名無しさん
07/05/21 19:39:11
リストビュー?
ツリービューじゃないのか?

437:デフォルトの名無しさん
07/05/21 19:42:05
あ、ツリービューでした。

438:デフォルトの名無しさん
07/05/21 20:13:33
class Foo {
public:
 Foo(bar b);
 func();
private
 struct Impl;
 smart_ptr<Impl> pimpl;
};
があった時、インスタンス化されたFoo型のオブジェクトfのfunc()を
関数オブジェクトにしてSTLのアルゴリズムに渡したいんですが
(理由:func()はFooのコンストラクタによって初期化されたメンバpimplを利用する)、
どうすればいいんでしょう?
出来れば関数ポインタではなく関数オブジェクトとして扱いたいです

439:デフォルトの名無しさん
07/05/21 20:26:53
boost::function<int ()> f = std::bind1st(std::mem_fun(&Foo::func), that);
だって、boostのチュートリアルに書いてあった

440:デフォルトの名無しさん
07/05/21 20:33:21
boost::bind(std::mem_fun(&Foo::func), &f)

441:デフォルトの名無しさん
07/05/21 20:37:03
回答ありがとうございます、上手く行きました。
しかしこんな奇怪なコードが通ることについてとても不思議に思います。

442:デフォルトの名無しさん
07/05/21 21:45:31
質問です。

プログラム初心者の質問なんですが、
プログラム上で指定したフォルダに、ファイルがいくつ格納されているのか?
また、どんな名前のファイルなのか調べる方法はないものでしょうか?

443:デフォルトの名無しさん
07/05/21 21:47:53
あります。

444:デフォルトの名無しさん
07/05/21 21:47:53
あげてしまいました。ごめんなさい。
あと環境はC++です

445:デフォルトの名無しさん
07/05/21 21:48:02
>>442
Windows環境なら、FindFirstFile でぐぐるとよろし

446:デフォルトの名無しさん
07/05/21 21:50:24
>>442
Win32ならFindFirstFile/FindNextFile

447:デフォルトの名無しさん
07/05/21 21:51:59
>>442
Win32APIを使うならFindFirstFile、FindNextFile、FindClose。

448:デフォルトの名無しさん
07/05/21 21:52:44
>>445-446
式は来月あたりですか?

449:デフォルトの名無しさん
07/05/21 21:53:19
<boost/filesystem/operations.hpp>あたり

450:デフォルトの名無しさん
07/05/21 21:53:51
421です。
いただいたヒントとatoiで修正することができました。
どうもありがとうございました。


451:デフォルトの名無しさん
07/05/21 21:57:59
442です

ありがとうございます。
環境はWindowsなので、FindFirstFileでいいようです。
例になるコードもぐぐれたので、なんとかがんばってみます!

452:デフォルトの名無しさん
07/05/21 22:01:04
>>439-441
boost::bind なら↓でおk

boost::bind(&Foo::func, _1)

453:デフォルトの名無しさん
07/05/21 23:47:50
>448
全然一致してないじゃん

454:デフォルトの名無しさん
07/05/21 23:57:08
tr1::bindでもいいよ

455:デフォルトの名無しさん
07/05/22 02:41:30
二次関数(y = a x^2+ bx +c)でxがx1 <= x <= x2のときの最大値と最小値(そのときのxの値も含めて)を求めるプログラムを作成せよ。
ここでa,b,cは整数、x1,x2は浮動小数とする。

数学の発展課題として出されたのですがさっぱり分かりません。
どなたか手を差し伸べてください・・・orz

456:デフォルトの名無しさん
07/05/22 02:43:42
>>455 丸投げは宿題スレ逝け。

457:デフォルトの名無しさん
07/05/22 03:05:43
C++の質問なのですが、
配列:123224があるとして、2の要素数だけを取り払い、前詰めをして
配列:134にするには、どのような方法がありますか?
お願いします。

458:457
07/05/22 03:13:32
Deleteを使わない方法がありましたら、それをお願いします

459:デフォルトの名無しさん
07/05/22 03:21:13
Deleteというのが何なのか知らんが、
std::vectorと共通アルゴリズム使えば一発じゃないか?

460:デフォルトの名無しさん
07/05/22 03:21:35
>>457-458
配列って std::vector のことか?
結果の要素数が変わってるんで、組み込み配列じゃないんだろう。
だったら remove + erase でいい。

"Delete" って delete 演算子のことか?
new を使ってないなら使うもクソもねーよ。

461:デフォルトの名無しさん
07/05/22 03:31:02
>457

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int main(){
int array[] = {1,2,3,2,2,4};
vector<int> vi(array, array+6);

vi.erase(remove(vi.begin(), vi.end(), 2), vi.end());

for(int i=0; i<vi.size(); i++)
cout << vi[i] << ' ';
cout << endl;

return 0;
}

462:デフォルトの名無しさん
07/05/22 05:55:58
>>368です

>>389 >>420 >>425 >>427 さん、レスありがとうございます。
素因数分解を使うと手っ取り早く約数が計算できるのですね。
後でwikipediaを見て知りました(汗
あと、本探索部分もいらないループしてましたし。
プログラムを書いていただいたお二方もありがとうございました。
>>427さんのプログラムだと2秒で終わりました!
素因数分解の方法とか、ためになります。(まだ、ちゃんと読めてないですけど)
ありがとうございました。

463:デフォルトの名無しさん
07/05/22 06:22:51
うーむ・・こんなにも差が出るもんなんやね・・
アルゴリズムの大切さをあらためて実感した。

464:デフォルトの名無しさん
07/05/22 07:48:37
>>462
中学で習うよ・・・

465:デフォルトの名無しさん
07/05/22 08:07:40
>>462
約数の和

60 の場合
60= 2^2 * 3^1 * 5^1
(60の約数の和)=(2^0 + 2^1 + 2^2)*(3^0 + 3^1)*(5^0 + 5^1)
=(1+2+4)*(1+3)*(1+5)=168

>>427 のアルゴリズム
60=2^2*15
(60の約数の和)=(15の約数の和)*(2^0 + 2^1 + 2^2)
=(15の約数の和)*(2^3-1)/(2-1)

>>428 のアルゴリズム
60=2^2*15
(60の約数の和)=(15の約数の和)*(2^0 + 2^1 + 2^2)
=(15の約数の和)*(2^0 + 2^1) + (15の約数の和)*2^2
=(30の約数の和) + (15の約数の和)*2^2

466:デフォルトの名無しさん
07/05/22 12:56:16
C++で値クラスを作る際に、Cスタイルの構造体を選択した場合、
コンストラクタのオーバーロード
(引数なしでメンバは全てゼロ、または指定引数で初期化といった動作をさせるため)
すること、さらに考えを進めて振る舞い、つまりメンバ関数を持たせることって良くないんでしょうか?

467:デフォルトの名無しさん
07/05/22 13:02:16
凸包を調べるためにQhullを使ってるんだけど、頂点配列points[i]から
凸包の外周要素に使われた点の添字を抜き出す方法って無い?

色々やってみたけど、外周要素の点の座標しかもってこれないです。

468:デフォルトの名無しさん
07/05/22 13:03:45
構造体にメンバ関数を持たせることに対する文法的な質問?
それとも比較的どうでもいいコーディングスタイル的な質問?

前者なら、文法上可能。
classとstructはデフォルトのアクセス修飾が異なるだけでなんら問題なし。

後者なら、好きにすれば?としか言いようがない。

469:デフォルトの名無しさん
07/05/22 13:15:52
|は演算子ですか?こういう使い方みるんですが

a(x|y,z)

470:デフォルトの名無しさん
07/05/22 13:16:26
入門書に書いてあるような事を聞かない。

471:デフォルトの名無しさん
07/05/22 13:18:57
じゃあスレタイに初心者歓迎なんてつけないでください

472:デフォルトの名無しさん
07/05/22 13:26:26
読んでも分からない事ならいいが、
読めば誰でも必ず分かる事を聞かれても困る。

473:デフォルトの名無しさん
07/05/22 13:28:11
1か0かって書いてたんで変数1か0しか無意味ということですか?

474:デフォルトの名無しさん
07/05/22 13:28:27
演算子ですよ

475:デフォルトの名無しさん
07/05/22 13:29:34
x|y ビットOR
x||y 論理演算OR

476:デフォルトの名無しさん
07/05/22 13:30:59
ビットOR の使いかたがわかりません

477:デフォルトの名無しさん
07/05/22 13:33:47
各ビットでORが必要になったら使う
必要でなかったら使わない

478:デフォルトの名無しさん
07/05/22 13:34:01
y==11001010
x==00110101

z=x|y

z==11111111

479:デフォルトの名無しさん
07/05/22 13:34:09
たとえば
a = 99|137;//aには235が代入される
01100011 (99)
10001001 (137)
---------ビットOR
11101011 (235)


480:デフォルトの名無しさん
07/05/22 13:41:08
こんなのにわざわざ…
おまいら親切だな

>>471
モノには順序(ry

481:デフォルトの名無しさん
07/05/22 13:59:50
うん、俺今ちょっと気分いいんだ。

482:デフォルトの名無しさん
07/05/22 14:06:12
惚れました(*´ェ`*)

483:デフォルトの名無しさん
07/05/22 14:15:46
誰かcygwinでwhileを使った九九のプログラムの作り方を教えてくれませんか(´д`)

484:デフォルトの名無しさん
07/05/22 14:17:27
宿題は自分で。

485:デフォルトの名無しさん
07/05/22 16:34:09
URLリンク(www.uploda.org)

リスト云々覚えようかとこんなの書いてみたんですが、下から10行目辺りのreallocの所で、強制終了してしまいます。
どこが悪いんでしょうか・・・・誰か教えて下さい

486:デフォルトの名無しさん
07/05/22 16:41:48
ポインタを初期化もして無いくせにrealloc使うな。
どうしても使いたきゃNULLで初期化してから使え。

487:デフォルトの名無しさん
07/05/22 16:44:04
つーか、
struct late data[20];//とりあえず、20個分
struct late *memp=data;//↑のデータの最初のアドレスをmempに
配列のアドレスで初期化しとる。

初期化しなければ、グローバル変数だからNULLが入るんでうまくうごいたのにね。

488:デフォルトの名無しさん
07/05/22 16:47:11
reallocの動作を勘違いしてる

489:485
07/05/22 16:52:22
む・・・良く分かんない・・・・・・orz
reallocの一つ目の引数には、中身が入ったポインタを指定してはいけないって事ですか?

490:デフォルトの名無しさん
07/05/22 16:54:10
>>489
一つ目の引数は必ずmallocやreallocで取得したポインタ(か、NULL)
同じ位置で指定したサイズが取得できないと、別の場所でallocしなおして
最初のやつはfreeされる。

491:485
07/05/22 16:57:11
>>490
あ、分かりました。
struct late data[20];//とりあえず、30個分
struct late *memp=data;//↑のデータの最初のアドレスをmempに
↑の部分を

struct late *memp;
memp = (struct late*)malloc((sizeof(struct late)) * 20);
こうすればいいんですよね?

492:デフォルトの名無しさん
07/05/22 16:59:54
>>491
まあそういうこと。
そして、reallocするということは、それが常に同じアドレスとは限らない。

493:485
07/05/22 17:01:35
>>492
ありがとうございました。物凄く勘違いしてたっぽいですねorz
勉強になりました。

494:デフォルトの名無しさん
07/05/22 17:09:37
>>466
C++/CLIでのことだったらそっちのスレで聞いたほうが的確な助言がくると思うぞ。

495:デフォルトの名無しさん
07/05/22 21:28:41
URLリンク(www.heat-devil.com)
非常に初心者な質問なのですが、
ファイル分割の勉強中で↑な感じで3つに分けて
borland C/C++コンパイラでbcc32 a.cpp hoge.cpp hoge.hとやったら
『 hoge.h 1: 宣言の構文エラー』と出るのですが、
hoge.hのどこが間違っているのか分からないのでどなたか教えてくださいorz

496:デフォルトの名無しさん
07/05/22 21:50:28
>>495
なんで hoge.h がエラー扱いされてしまうのかは俺も少々不可解だけど、

  bcc32 a.cpp hoge.cpp

でおk。hoge.h は a.cpp と hoge.cpp から include される対象に
過ぎないからコンパイルする必要は無し。

497:デフォルトの名無しさん
07/05/22 21:57:29
.hをコンパイルすると、C++じゃなくて、Cとして
コンパイルされるんじゃないの。

498:デフォルトの名無しさん
07/05/22 21:59:58
ああ、なるほど。

499:デフォルトの名無しさん
07/05/22 22:16:23
>>496-497
うわぁああ出来ました!!
そうか、iostreamとかもコンパイルの時書かないですしね><
分割するの初めてだったからファイルの書き方間違っているのかと
今日一日中ネットや本で調べたけど分からなかったのでホントに嬉しいです・・・(;△;)
まさかそっちのやり方が間違っていたとは。
ありがとう、本当にありがとうございます><


500:デフォルトの名無しさん
07/05/22 22:18:59
(;△;)

501:デフォルトの名無しさん
07/05/22 22:49:01
オーム社「C言語によるプログラミング[応用編]」(第一版)
サンプルプログラム sample2 myform.c

をそのまま写して、コンパイルしたところエラーがでました。
環境は、
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) です。

エラー出力は、
myform.c:57: error: two or more data types in declaration specifiers
myform.c:104: error: conflicting types for �。GetArg�「
myform.c:57: error: previous declaration of �。GetArg�「 was here
myform.c:256: error: conflicting types for �。LineAdd�「
myform.c:58: error: previous declaration of �。LineAdd�「 was here

int GetArg( int, char *[], int *, int *, int *, int *, char [] );
int GetArg(
int argc,
char *argv[],
int *column, /* カラム数 */
int *line, /* 行数 */
int *upper, /* 上余白行数 */
int *left, /* 左余白行数 */
char file[] /* 入力ファイル */
)

int *LineAdd( char *, char *, int );
char *LineAdd( char *to_buff, char *from_buff, int num )


502:501
07/05/22 22:51:35
このエラーの原因を知りたいのですが、
ヒントやポインタをおねがいします。

一番下のこの部分は無視してください。
int *LineAdd( char *, char *, int );
char *LineAdd( char *to_buff, char *from_buff, int num )
_

503:デフォルトの名無しさん
07/05/22 22:52:40
どこが57行目?

504:デフォルトの名無しさん
07/05/22 22:56:31
>>501
セミコロン

505:デフォルトの名無しさん
07/05/22 23:02:57
int GetArg( int, char *[], int *, int *, int *, int *, char [] );
int GetArg(
int argc,
char *argv[],
int *column, /* カラム数 */
int *line, /* 行数 */
int *upper, /* 上余白行数 */
int *left, /* 左余白行数 */
char file[] /* 入力ファイル */
){
return 0;
}
とりあえず、gcc 3.4.6にかけてみたけど、エラーなんて
でなかったぜよ。

506:501
07/05/22 23:03:33
57行目
int GetArg( int, char *[], int *, int *, int *, int *, char [] );

104行目
int GetArg(
int argc,
char *argv[],
int *column, /* カラム数 */
int *line, /* 行数 */
int *upper, /* 上余白行数 */
int *left, /* 左余白行数 */
char file[] /* 入力ファイル */
)

です。
myform.c:256: error: conflicting types for �。LineAdd�「
myform.c:58: error: previous declaration of �。LineAdd�「 was here
は無視してください。

507:501
07/05/22 23:06:50
>>504
int GetArg( int, char *[], int *, int *, int *, int *, char [] );
^^^

このセミコロンのことでしょうか?

>>505
わざわざコンパイルしてくださって、ありがとうございます。
お手数かけてすいません。
これから、自分の環境でその部分だけコンパイルしてみます。

508:501
07/05/22 23:11:45
>>505をコンパイルしたところ、自分の環境でもエラーはでませんでした。

ほかに GetArg関数に関係があるところは、メイン関数でよびだしたこの場所だと思います。
なにかまちがえたことをしているでしょうか。

int main ( int argc , char *argv[] )
{
int column, line, upper, left;
char file[SMALL_BUFF_SIZE];
int result;

/* main引数取得 */
result = GetArg( argc, argv, &column, &line, &upper, &left, file );


509:デフォルトの名無しさん
07/05/22 23:46:33
「基本クラスにあるprotectedなメンバ関数を、
 派生クラスで名前も処理も変えず、publicに昇格する」 というのは、

class base {
protected:
  int hoge() { ... }
};

class derived : public base {
public:
  int hoge() { return this->base::hoge(); }
};

こんな感じになりますか?
それとも、もっと簡単にできますか?

510:デフォルトの名無しさん
07/05/23 00:04:48
名前も処理も変えないんだったらオーバーライドする意味無いやん
さらに言えばprotectedにする意味無いやんhoge()はpublicにすりゃいいやん
って思ったんですがどうでしょう?

511:501
07/05/23 00:09:27
エラーの原因がわかりました。
57行目の int GetArg( int, char *[], int *, int *, int *, int *, char [] );
の前にある、

enum
{
NORMAL_END, /* 0 */
USAGE_ERROR, /* 1 */
FILE_ERROR /* 2 */
};
^^^^
このセミコロンが欠けていました。
>>504さんのいうとおりでした。

おさわがせいたしまして、どうもすいませんでした。
レスくださった方たち、ありがとうございました。


512:デフォルトの名無しさん
07/05/23 00:10:16
>>510
尤もだ。

513:デフォルトの名無しさん
07/05/23 00:11:15
using base::hoge;
でよくね?

514:デフォルトの名無しさん
07/05/23 12:47:58
C++初心者で申し訳ないのですが、質問させてください。
↓のページのSFMTを、C++プログラムから利用したいのですがうまくいきません。
URLリンク(www.math.sci.hiroshima-u.ac.jp)

URLリンク(www.math.sci.hiroshima-u.ac.jp)
Linux上でg++(ver4.20)でコンパイルしてみると、sample2-1や2-2が詰まります。
ヘッダでinline宣言してある関数が"xxx is used but never defined"と警告され、
リンク時にエラーになります。
sample2-3のようにcファイルをincludeする、またはgccならばコンパイルできますが
c++のソースから呼び出さねばならない場合、どうすればよいのでしょうか?
c++用ライブラリ等も紹介されてますが、呼び出し側プログラムの書き換えを最小限に
したいので、inline関連のオプション追加で解決してくれるなら、と思っています。
よろしくお願いします。

515:デフォルトの名無しさん
07/05/23 13:03:31
>>514
よく見てないけどこんなのは?
extern "C" {
#include "SFMT.h"
}


516:デフォルトの名無しさん
07/05/23 13:33:50
#include<iostream>
#inlucde<iostream.h>

C++でのこの2つって何か違いがあるんですか?

517:デフォルトの名無しさん
07/05/23 13:41:38
はい。

518:デフォルトの名無しさん
07/05/23 13:41:54
後者は過去の遺産。

519:デフォルトの名無しさん
07/05/23 13:49:38
積極的に.h無しが推奨される理由があるなら教えて頂きたいです><
Cの勉強始めた時から.h有りで書いていて慣れていたので。

520:デフォルトの名無しさん
07/05/23 13:53:59
規格に書いてあるから。

521:デフォルトの名無しさん
07/05/23 13:55:57
違いがあるから

522:デフォルトの名無しさん
07/05/23 13:56:20
iostream.h の方は std 名前空間に入ってないから。

523:デフォルトの名無しさん
07/05/23 14:21:06
>>516
iostream.hの方が入出力が速い処理系があります(VC6とかVC6とかVC6とか)。
でも既に古いC++です。

524:デフォルトの名無しさん
07/05/23 14:36:13
>>522
し、正直よく分からないけどあなた様のレスのコピペを保存して
賢くなったら読み返して理解してみます><
>>523
ありがとうございます。
新しい処理系だと.h無しの方が処理が速いんですね。
参考になりました><

525:デフォルトの名無しさん
07/05/23 15:04:09
>>524
>518とか>520も無視すんなや。ちゃんとメモしとき。
それからついでに。
>新しい処理系だと.h無しの方が処理が速いんですね。
誰もそんなこと書いていない。

526:デフォルトの名無しさん
07/05/23 15:18:03
>>525
いや、2chでよくあるYES/NOレスみたいな感じで
スルーか微妙だったから具体的に教えてくれた人にレスしたんだ。
もし気を悪くしたらごめんです。
それと昔は.h有りの方が速かったけど今は>>522さんが言った理由な感じで
.h無しの方が良いから処理速度は.h無しでも変わらなくなったってことかな?
なんだか分かったような分かってないようなだけど突っ込んでくれてありがとう><

527:デフォルトの名無しさん
07/05/23 15:40:43
処理速度なんて関係ない。
要は.h有りは古い規格で、今は.h無しが標準ということ。
実際VC++では2003あたりから標準に則ってiostream.hは提供されなくなった。

528:デフォルトの名無しさん
07/05/23 15:49:52
礼儀のなってない自称初心者ほど嫌われるものはない。

529:デフォルトの名無しさん
07/05/23 16:10:08
>>527
つまりその名前空間云々で.h無しの方が良くて、
その規格に合わせて処理系も変わってきたから.h無しが推奨されると。
という把握をしてみました。
とりあえず名前空間云々を可及的速やかに勉強してみます><

>>528
うん、なんだかごめんです。
「規格だから」「過去の遺産」「違いがあるから」的なのじゃなくて
「どうしてそういう規格でどう違いがあって」的な理由を聞きたくて
「うん」とか表面的な答えの人は2chではあまりちゃんと答えてくれない
経験則から他の人にだけレスしてしまった。
気を悪くしていたら反省している。


530:デフォルトの名無しさん
07/05/23 16:19:34
他の板には余りないこの板の特徴かも知れんが、
「答えだけ書くから後は自分で調べろ」的なパターンかもね。

兎にも角にも>529は「書いてあるものを読み」、「書かれてないことを読まない」ようにしないとな。

531:デフォルトの名無しさん
07/05/23 16:33:20
自分で答えを決め付けてから読むから
回答者の意図なんて全然読み取れてない

532:デフォルトの名無しさん
07/05/23 16:45:07
>>531
こんだけ反省してるって言ってるんだから、
流石にいい加減しつこいというか。
質問者だけにやたら厳しいが仮にも初心者歓迎謳ってるんだから
回答者にもある程度誘導的な姿勢は必要だとも思うし。

533:デフォルトの名無しさん
07/05/23 16:46:04
いつまで苛めてんだ。カルシウム摂れ。

534:デフォルトの名無しさん
07/05/23 16:47:36
いつまでもいいんだ。カルシウムくれ。

535:デフォルトの名無しさん
07/05/23 16:49:06
煮干が美味いんだ。昆布でダシは邪道

536:デフォルトの名無しさん
07/05/23 17:07:43
質問です

最近C++(つかプログラミング)を始めた者です
入門書「やさしいC++」を読んで、一通り簡単な文法とかは理解したんですけど、
この板に出てくるソースによくある、関数の種類とかについては全く分かりません。
そろそろコンソールアプリケーションじゃなくて、ウインドウのソフトも作ってみたいと思うんですが、
どうやら、関数をいっぱい知ってなきゃ作れないらしいですね。

これから自分はどんな本,どんなサイトを見て勉強していくべきなのでしょうか?

537:デフォルトの名無しさん
07/05/23 17:46:03
やれやれ。そろそろネタばらしでもしてやるか。

昔はインクルードするものと言ったらヘッダーファイルで当然だったのだが
果たしてヘッダーファイルが実在する必要があるのか、
それを規格で要求するべきなのかと言う議論があった。
そのためにいかにもファイルの拡張子っぽい.hをなくし、
コンパイラは標準ライブラリのヘッダーをインクルードしている部分を
通常のインクルード処理ではなく、対応する標準関数その他を有効にする
単なるスイッチとして使うことを許すようにした。

538:デフォルトの名無しさん
07/05/23 17:55:49
>>536
MSDN

539:デフォルトの名無しさん
07/05/23 18:01:54
質問です。
typedef float Vector3[3];
なんてtypedefをしたんだけど。
vector<Vector3> vec;
vec.resize(10);
が通らない。
vector<float> vec;
vec.resize(10);
なら通るんだけど。
どうして?

540:デフォルトの名無しさん
07/05/23 18:03:51
>>539
配列にはそのまま代入ができないので、無理。

541:デフォルトの名無しさん
07/05/23 19:27:17
vectorが内部で何やってるか考えてみようぜ

542:デフォルトの名無しさん
07/05/23 20:54:27
ここで聞いて良いのか分からないのですが、間違っていたらすみませんが誘導お願いします
VC++の初心者質問なんですがCOMインターフェイス使って#import する場合
例えば、エクセルなんかの場合
##import "C:\Program Files\Microsoft Office\Office\excel9.olb"
rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces


とかやるんですが、これはビルドしたときにexeに組み込まれちゃうんでしょうか?
もしくはexeが実行したときにオブジェクトライブラリが読み込まれるのでしょうか?


543:デフォルトの名無しさん
07/05/23 21:08:11
>>542
excel9.olbの内容はコンパイル時にのみ参照される。
実行時にexcel9.olbは不要。

544:デフォルトの名無しさん
07/05/23 21:25:18
>>539
vector<vector<float> > vec; でいいじゃん
resize()は要素分行う必要があるので面倒だけど

545:デフォルトの名無しさん
07/05/23 21:29:35
>>543
ありがとうございます


546:デフォルトの名無しさん
07/05/23 21:39:56
>>544
struct Vector3 { float vec[3]; };
vector<Vector3> vec;
の方がいいんじゃないか

547:デフォルトの名無しさん
07/05/23 21:54:57
>>539

struct Vector3 {
  float a;
  float b;
  float c;
};

vector<Vector3> vec;

548:デフォルトの名無しさん
07/05/23 22:01:34
abcよりもxyzのほうが的確だと思う

549:デフォルトの名無しさん
07/05/23 22:03:38
そんなことはどうでもいいと思う

550:デフォルトの名無しさん
07/05/23 22:18:21
M$のABC構造体とかふざけた名前のやつを思い出した

551:デフォルトの名無しさん
07/05/23 22:21:55
フォントの幅だっけ?

552:デフォルトの名無しさん
07/05/24 09:39:23
ABCD包囲網だな。CとDがうぜえ

553:デフォルトの名無しさん
07/05/24 19:01:31
VC++2003でexeのプロジェクトを別のexeで参照設定する事はできますか??

554:デフォルトの名無しさん
07/05/24 19:30:29
---------------------------
Microsoft Development Environment
---------------------------
'○×△□.exe' への参照を追加できませんでした。 これは有効なアセンブリまたは
COM コンポーネントではありません。拡張子 'dll' を持つアセンブリまたは COM
コンポーネントのみを参照することができます。ファイルがアクセス可能で、有効な
アセンブリまたは COM コンポーネントであることを確認してください。
---------------------------
OK   
---------------------------


555:デフォルトの名無しさん
07/05/24 19:52:25
COMコンポーネントじゃないので、できませんという事ですね。
ありがとうございます><

556:デフォルトの名無しさん
07/05/24 19:55:02
( ゚д゚)ポカーン

557:デフォルトの名無しさん
07/05/24 19:58:21
>>556
>>555とは別人だけど、違うの?
COMコンポーネントかDLLしか参照できないってことじゃないの……?

558:デフォルトの名無しさん
07/05/24 20:46:00
VC++2003で exeのプロジェクト を 別のexeで 参照設定する事
謎が多いな。 make の依存関係だけなのか、
別のexe が、元 exe をリンケージするのか

559:557
07/05/24 21:02:04
>>558
それは自分も思った。
ShellExecuteとかそのたぐいでいいじゃんてね。

でも、exeの参照の可否と、その有用性はとりあえず関係なくね?

560:デフォルトの名無しさん
07/05/24 21:19:31
>>557
exeでも参照できるよ







.NET Frameworkならね

561:560
07/05/24 21:22:02
ていうかVC初心者スレ池

562:デフォルトの名無しさん
07/05/24 23:26:48
「構造体とクラスは無関係」という人をよく見かけるけど、
構造体からヒントを得て、クラスという概念を作ったわけではないの?
構造体使ってて、あー、こういう風にしてーなー、と思ったところを、
クラスという形で実現したのであれば、
無関係ってちと言い過ぎじゃないかなー、とか思うんだけど。

563:デフォルトの名無しさん
07/05/24 23:29:18
switch(event)
{
case1:
foo;
case2:
bar;
default: ←100行目
}

if( !p1)
{
・・・
GOTO Test;

Test: ←100行目
}
gcc version 4.1.2 で、
上のように、default: や Test: の後が空行のまま } がくると、次のようなエラーがでます。

handle.c:100: error: label at end of compound statement

これは仕様なのでしょうか?
default: は消し、 Test: は {}の外にうつして回避したのですが、それで正しいでしょうか。
アドバイス、よろしくお願いします。

564:デフォルトの名無しさん
07/05/24 23:31:09
>>563
ラベルの後には文が必要です。
;(セミコロン)だけでも付けましょう。

565:563
07/05/24 23:39:39
>>564
セミコロンをつけたところ、コンパイルがとおりました。
どうもありがとうございました。

566:デフォルトの名無しさん
07/05/25 00:35:43
URLリンク(www.uploda.org)
この選択ソートのプログラムをswap関数を用いて作り変えたいと思い、
下記のようにしてみたんですが、うまくいきません。
URLリンク(www.uploda.org)

何が悪いのか教えてください。お願いします。

567:デフォルトの名無しさん
07/05/25 00:37:39
swapに渡されるのは引数のコピーだ

swap(int* a,int* b);

568:デフォルトの名無しさん
07/05/25 00:56:53
色々やってみましたが、分かりませんでした。
よろしければ正解例を示していただけないでしょうか。
お願いします。

569:デフォルトの名無しさん
07/05/25 01:02:35
よくみたら内部で配列を交換してんのか

つうかコレコンパイルできなくね?

面倒だからとりあえず
int i,j,k,work,num,a[100];
をmainの外に出せば動くんじゃね

570:デフォルトの名無しさん
07/05/25 01:06:42
>>569
はい、566の下のソースはコンパイルできていません。
mainの外に出してもできないようです。

571:デフォルトの名無しさん
07/05/25 01:19:43
mainの外に出したら動いたわけだが、、、

572:デフォルトの名無しさん
07/05/25 01:45:14
>>570URLリンク(www.uploda.org)

573:デフォルトの名無しさん
07/05/25 05:35:49
mciSendStringでnotify(+MCI_NOTIFY_SUCCESSFUL)で
ループ再生を行っている時、
まれにループに入るタイミングでループされず、
永遠とnotifyが投げられビジー状態になってしまいます。

100回に1回も起こらないので、原因は良く分かりませんが、
もしかしたら、曲を変えようと前の曲をstop、closeし、
新しい曲をopen、playするのと同じぐらいのタイミングで
notifyが来た時に起きているのかもしれません。

対策方法などがありましたら、教えてください。

574:デフォルトの名無しさん
07/05/25 06:26:54
再生するファイルの種類は何かね?あとOS

575:デフォルトの名無しさん
07/05/25 08:12:19
×永遠と
○延々と

576:デフォルトの名無しさん
07/05/25 09:01:26
>>562
C++のクラスはSimulaからのインスパイヤ

577:573
07/05/25 09:22:55
>>574
ファイルはmidi、OSは9xです。

>>575
素でやってしまいました・・

578:573
07/05/25 09:34:53
後、もちろんmciSendStringの戻り値は0(成功)です。
音楽を変えるためstop、closeした後、
前の曲のnotifyが来てしまいおかしくなるのかもしれません。

notifyが連続で来る事は普通は無いので、
その時は、playをsendしないようにする方法とかもあると思うんですけど。

579:デフォルトの名無しさん
07/05/25 10:20:06
stringはあまりよくないと聞いたことがあるのですが
charの配列を使うよりstringを使ったほうがいいですよね?

580:566
07/05/25 10:50:50
>>572
ありがとうございました。
保存したので、もう消していただいてもかまいません。

581:デフォルトの名無しさん
07/05/25 11:06:24
>>579
好きにすればいいと思うよ。
配列とnew/delete演算子と
テンプレートクラスの勉強が済んでいる前提で。

582:デフォルトの名無しさん
07/05/25 11:54:11
>>579
よくない理由を問い詰めておけ。

583:デフォルトの名無しさん
07/05/25 12:21:45
1方向Listを作っています。参考書等で調べたのですが
削除関数の部分をどう記述すれば良いのか分からないので教えてください。
URLリンク(uproda11.2ch-library.com)

584:デフォルトの名無しさん
07/05/25 12:30:56
>>583
まずは自分で書けよ。今のソースじゃどういう動作にしたいのかもわからん。

585:デフォルトの名無しさん
07/05/25 14:03:27
もうソース見えん。

削除ってのはさ、
A→B→C のBを消すときにAの指してる先をCにしてBを消せばいいわけだ。
でも片方向でBの前を探すのは面倒だから、Bが指してるCの内容を
そっくりBにコピーしてCを消す、というトリックが使える場合があるぞ。

586:デフォルトの名無しさん
07/05/25 15:20:22
mfcについて教えてください。

通信受信プログラムで受信データをエディットコントロール(複数行表示)に表示しているのですが、
以下のコードでは、エディットコントロールに文字列を追加する際に必ずスクロールされてしまいます。
スクロールされない方法を教えてください。

int iLen = edit->GetWindowTextLength();
edit->SetSel(iLen, iLen);
edit->ReplaceSel("Hello\n");

WinXP & Visual Studio 2003 & mfc7です。

587:気まぐれアナスイ
07/05/25 15:31:32
!(Φ_Φ+){???}
"hello"


  #####
  #
  #
  #
  #

588:気まぐれアナスイ
07/05/25 15:37:31
!(Φ_Φ+){???}
"hello"


  #####
  #
  #
  #
  #

589:デフォルトの名無しさん
07/05/25 15:38:59
>>586
MFCスレへどうぞ。
つーか、LineScrollで元のとこに戻せばいいんでないの?

590:デフォルトの名無しさん
07/05/25 16:24:49
>>589
レスありがとうございます。

LineScrollで戻すと、1行書くごとに「下へスクロール→上へスクロール」となり、上下にスクロールが発生してしまい
とても見づらくなってしまうのです。

「スクロールなし」でエディットコントロールに文字列を追加できないものでしょうか?

591:気まぐれアナスイ
07/05/25 16:57:37
!(ΦyΦ+){???}

『のだめカンタービレ』

592:気まぐれアナスイ
07/05/25 16:58:53
!(ΦyΦ+){???}

『のだめカンタービレ』

593:デフォルトの名無しさん
07/05/25 17:12:41
初めまして、VC++のC++/CLIのフォームアプリケーションについて質問があります。

今、LimeChat 2 の様なアプリを作っていています。
そのアプリのテキストボックスには、カーソルが表示されていません。
どのようにすれば、カーソルを表示させないようにできるのでしょうか?

また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?

594:つ[SetRedraw()]
07/05/25 17:13:25
>>590
誘導されているんだから更に質問するなよ。

595:デフォルトの名無しさん
07/05/25 17:14:57
>>593
C++/CLIは最早C++でさえないので該当スレへ。つーか、プロパティだか属性だか知らんが編集可否とかカーサ表示有無とかないの?

596:デフォルトの名無しさん
07/05/25 17:21:17
>>595
それが無くて困ってますorz

該当スレ = C++/CLI について語ろうぜ Part2
で質問してもいつもスルーされてしまうんですorz

597:デフォルトの名無しさん
07/05/25 17:23:06
そりゃ、明らかにC++/CLIの話題じゃなくて、.NET FrameworkなりCLRなりの話題だもん。

598:デフォルトの名無しさん
07/05/25 17:28:00
自分でスレ立てるしかないですかね?

599:デフォルトの名無しさん
07/05/25 17:36:19
>>598
やめれ。

600:デフォルトの名無しさん
07/05/25 17:37:26
>>598
やめれ。

601:デフォルトの名無しさん
07/05/25 17:40:29
>>598
やめれ。

602:デフォルトの名無しさん
07/05/25 17:40:44
やめときますorz
どこに書き込んでも
>こんな奴がC++出来るんだぜとかいってると思うとため息出るな・・・
とか
>(゚Д゚)
みたいに馬鹿にされますorz

これってそこまで初歩的な質問ですかね?

603:デフォルトの名無しさん
07/05/25 17:59:05
>>602
ヘルプぐらい見ろよ。
MSDNで「TreeViewメンバ」一覧とか見れば、
BeginUpdate ツリー ビューの再描画を無効にします。
とか思いっきり書いてあるだろ。
日本語読めないの?

604:デフォルトの名無しさん
07/05/25 18:00:21
>>602
> そのアプリのテキストボックスには、カーソルが表示されていません。
> どのようにすれば、カーソルを表示させないようにできるのでしょうか?
>
とりあえず、この文面だとカーソルを消したいのか表示させたいのか分からん。
あとこの場合は、マウスの移動とともに表示される矢印のマウスカーソルと、
テキストの間に表示される縦棒の二つの意味にとれるので、
そこも説明する必要あり。

605:デフォルトの名無しさん
07/05/25 18:15:45
>>603
あったんですか(゚Д゚)

>>604
テキストの間に表示される縦棒を消したいです。

606:デフォルトの名無しさん
07/05/25 18:30:52
>>602
スレ違いって指摘されているの判る?
それでも居座るような状態だから馬鹿にされるんだよ。

607:デフォルトの名無しさん
07/05/25 18:54:14
俺はこのスレでC++/CLIを出してきても構わないと思うけどな
まあ答える奴は少ないだろうとも思うけど

602が答えを得られないのは602自身の問題

608:デフォルトの名無しさん
07/05/25 18:58:10
片っ端からマルチかよ。
そりゃ答えてもらえないわけだ。

609:デフォルトの名無しさん
07/05/25 20:36:14
構造体の末尾にパディングを入れてサイズを固定にしたいのですが、

struct hoge {
  int a;
  int *b;
  hoge *c;
  char padding[???];
};

例えば sizeof(hoge) == 16 になるようにしたい場合、??? にはどう書けばいいでしょうか?
16 - offsetof(hoge, padding) とか書ければいいのですが。

610:デフォルトの名無しさん
07/05/25 20:50:08
paddingまでが詰まってる前提なら
16-sizeof(a)+sizeof(b)+sizeof(c) でいいんじゃね

試してないけど

611:デフォルトの名無しさん
07/05/25 20:58:19
16バイトの配列との共用体にするとか

union hoge{
  char size[16];
  
  struct {
    int a;
    int *b;
  };
};


612:デフォルトの名無しさん
07/05/25 21:06:47
テキストに入力できる状態なら
縦棒消すの無理じゃない?

613:デフォルトの名無しさん
07/05/25 23:01:17
なぜなのかよく分かりませんが、LimeChat 2というIRCでチャットをするためのソフトでは、点滅しているカーソルが表示されていないんです

614:デフォルトの名無しさん
07/05/25 23:13:11
キャレット表示されてないと入力編集がものすごく難しくないか?

615:デフォルトの名無しさん
07/05/25 23:14:43
チャットソフトだからログ表示部品と発言入力部品が別なんだろ。
でログ表示部品にキャレット(カーソル)が出てしまうのがウザイと。

616:デフォルトの名無しさん
07/05/25 23:21:29
おまえらどこか一箇所でやれよw

617:デフォルトの名無しさん
07/05/25 23:27:44
ぐぐったらこんなのが引っかかった
BOOL HideCaret(HWND);
つーわけで消したいEditBoxのhwndを放り込んで使ってみよう

618:デフォルトの名無しさん
07/05/26 04:34:05
HideCaret(static_cast<HWND>(this->textBox1->Handle.ToPointer()));
でなんとかキャレットを非表示にできそうです。

しかし、外部シンボル ""extern "C" int __stdcall HideCaret(struct HWND__ *)" (?HideCaret@@$$J14YGHPAUHWND__@@@Z)" は未解決です。
というリンクエラーが出てしまいましたorz

619:デフォルトの名無しさん
07/05/26 06:05:17
>>593=>>602=>>605
.NETの話はVCスレ行けよ
キャレット(カーソル)うんぬんとかWin32APIスレ行けよ

620:デフォルトの名無しさん
07/05/26 08:26:09
>>618
user32.libをリンクしろ

>>619
環境依存ネタOkなスレだからありだろ

621:デフォルトの名無しさん
07/05/26 08:50:12
環境以前にスレ違いなわけだが

622:デフォルトの名無しさん
07/05/26 10:32:12
シフト演算(<< >>)ではなく、ローテートを行いたい場合、どのようにすればよいのでしょうか?

623:デフォルトの名無しさん
07/05/26 10:41:59
左右シフト演算をORで結合、かな。
コンパイラに拠っては、rotに展開されるであろう
組み込み関数とかがあるかもしれないけど。

624:デフォルトの名無しさん
07/05/26 10:49:45
組み込み関数あるね
unsigned long _lrotl(unsigned long value, int shift) 符号なし long 型整数の各ビットを左にローテートします。
unsigned long _lrotr(unsigned long value, int shift) 符号なし long 型整数の各ビットを右にローテートします。
unsigned int _rotl(unsigned int value, int shift) 符号なし整数の各ビットを左にローテートします。
unsigned int _rotr(unsigned int value, int shift) 符号なし整数の各ビットを右にローテートします。


625:デフォルトの名無しさん
07/05/26 11:44:25
>>620さんのおかげで解決しました。ありがとうございました。

>>621
スレ違いなら消えますorz

626:デフォルトの名無しさん
07/05/26 11:55:41
何度もスレ違いって言われてるだろ。
さっさと消えろやこの世からもな!

627:デフォルトの名無しさん
07/05/26 12:15:39
    _、,、
  θ《▼》θ                                  ; ,;从 , ガッ
  ノリ#゚-゚リ)((ニ(ニ(l     チュドーン   ..,  ''"´"''': ; .     、゙,',::、⌒::;.,'."));": ←>>626
  ( ノ つ|_||三三二弌ll============lニlll),,'   . : ;  _,; "   `.、:.(`:'⌒::"`.;`⌒゙":ドカーン
  《ソ|__/|ニ〃l,=l┘               "'' -''''"´    ;;.゛;((:;;`';::,");;";;;))`.;
    し'ノ                              ゛;((:;;`::"`.;`⌒゙);;";;;))`.;
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おまえが死ねよ
価値がないのはおまえだろw

628:デフォルトの名無しさん
07/05/26 12:24:24
そもそもCLIってなんですか?なにに使うんですか?

629:デフォルトの名無しさん
07/05/26 12:27:21
>>628
URLリンク(ja.wikipedia.org)

630:デフォルトの名無しさん
07/05/26 12:31:16
.NETプログラミングのことですか?

631:デフォルトの名無しさん
07/05/26 13:03:03
managed C++ とどう違うの?

632:デフォルトの名無しさん
07/05/26 13:29:01
>>630
大体あっている
.NET Frameworkを標準規格化した際の名称がCLIとでも思えばいい

>>631
構文がましになった

633:デフォルトの名無しさん
07/05/26 19:39:54
VS2005EEです。
Wktk(void(*func)(void)) というような関数に
クラスメソッド void cKwsk::Osieru()
のポインタを渡したいのですがC2440エラーでうまくいきません。
どのようにキャストすれば良いのですか?

634:デフォルトの名無しさん
07/05/26 19:44:45
Visual Studio 2005にて、以下のようなコードを書いたのですが

const TCHAR OutBuff[] = _T("D:\\TEST\\アイウエオ.txt\n");
const TCHAR OutFile[] = _T("abc.txt");

_tfopen_s(&fp, OutFile, _T("w+, ccs=UNICODE"));
_fputts(OutBuff, fp);
fclose(fp);

これで出来上がったabc.txtの中身を見ると
D:\TEST\[EOF]

要するにカタカナの「ア」以降出力されません。
これはどうすればうまくいくでしょうか?

環境はVS2005 SP1 WindowsXP SP2
ワイド文字を使用するでコンパイルしています。


635:デフォルトの名無しさん
07/05/26 19:49:39
>>633
そのメンバ関数を静的メンバ関数にすればいい。

636:デフォルトの名無しさん
07/05/26 19:51:15
>>633
キャストできない。
クラスメソッドでない普通の関数を噛ませるか、Wktkの方を変えるしかない。

637:デフォルトの名無しさん
07/05/26 19:52:25
>>634
ロケール

638:634
07/05/26 20:13:49
>>637
うまくいきました。ありがとう。

639:633
07/05/26 20:56:47
静的メンバ関数にすることで対応しました。
レスありがとうございました。

640:デフォルトの名無しさん
07/05/26 21:13:31
誰だよ
>環境以前にスレ違いなわけだが
みたいな糞逝ったのは

641:デフォルトの名無しさん
07/05/27 01:49:39
atlのT2Wを使うにしても、mbstowcs系を使うにしても
マルチバイトで"あいう"っていうのをワイド文字列strに変換したばあい、
str[0] = "あ", str[1] = "い", str[2] = "う"と言うふうにはならないんです
変換前と変換後で文字列が対応するように変換するにはどうしたらいいでしょう?


642:デフォルトの名無しさん
07/05/27 01:55:05
え?なるだろ?
ならないっていうなら、現状どうなってるんだ?

643:デフォルトの名無しさん
07/05/27 01:55:30
すいません、マルチバイトに変換してましたorz
ちゃんとT2W使った上手く変換できました

644:デフォルトの名無しさん
07/05/27 03:37:25
初心者ですが質問にお答えいただけるとうれしいです。
配列に直接機械語を埋めて関数ポインタで実行させたいのですが
よくわかりません。
環境はPentium4、WindowsXP、BorlandC++Compiler。
//ソース
#include <stdio.h>

int main(void)
{
   int (*func)(void);
   const char ch[] = {
      0xb8, 0x45, 0x23, 0x01, 0x00, 0xc3
   };
   func = (int(*)(void))ch;

   printf("%X", (*func)());

   return 0;
}
何かが決定的に間違っているのにちゃんと12345と表示されます。
アセンブリで
mov ax, 123h
ret
と書いてnasmでアセンブルすると
B8 23 01 C3と機械語が吐き出されます。
これをそのままch[]に埋め込んでもエラーで正しく実行されません。
axレジスタって16Bitですよね?なぜか32Bitで補正してやると正しく実行されるんですよね。
きっと、正しくできていると思い込んでいて実際には偶然こうなっただけなのでしょうけど
なぜ、これが出来て、普通にアセンブルして出来た機械語が実行できないのでしょうか?
もしかして、こういう行為自体が土台不可能な話で、今回出来たのはまったくの偶然ということでしょうか?
教えていただけないでしょうか、よろしくお願いします。

645:デフォルトの名無しさん
07/05/27 03:58:41
なんで初心者なのにhackのマネ事してるんだ

646:デフォルトの名無しさん
07/05/27 04:28:36
>>644
C++言語の範疇を逸脱した内容なのでスレ違い。
アセンブラ関連のスレへどうぞ。

647:デフォルトの名無しさん
07/05/27 04:36:01
masm系ならuse32

648:644
07/05/27 04:37:26
>>645
hackといわれてもよくわかりませんが
ただ、興味があったとしか申し上げられません。

>>646
こちらC言語です。どうぞ。
失礼。そうですね。ただCでこういうことが可能かどうかを知りたかっただけでして。
出来るか出来ないかだけでも教えて頂きたいと思っているのです。
あとはアセンブリでも機械語でも自分で調べて何とかしますので。

649:デフォルトの名無しさん
07/05/27 06:09:24
すいませんPGMファイルの読み込みの関数を作っているのですが、
im[j][i]=tempのところで落ちます。どうすればいいですか?おしえてください。
/*-------------------------------------------------------
PGMファイルの読み込みの関数
--------------------------------------------------------*/
int** read_PGM( FILE *fp, int *pw, int *ph){


int **im;

int i, j;
int temp, bright;


printf ("PGMの読み込み開始\n");

/*----------------------
P2形式のファイルか判別
-----------------------*/

if ( fgetc(fp) != 'P' || fgetc(fp) != '2' ){

printf("このデータはP2形式PGMファイルではありません。\n");
return (NULL);

}




650:デフォルトの名無しさん
07/05/27 06:10:50
/*----------------------
幅のデータの読み込み
----------------------*/

if ( fscanf( fp, "%d", pw) != 1 ){

printf ("幅の読み込みに失敗しました。\n");
return (NULL);

}

printf("幅のサイズは%dです。\n", *pw );


/*----------------------
高さのデータの読み込み
----------------------*/

if ( fscanf( fp, "%d", ph) != 1 ){

printf("高さの読み込みに失敗しました。\n");
return(NULL);

}

printf("高さのサイズは%dです。\n", *ph );





651:デフォルトの名無しさん
07/05/27 06:12:24
/*-----------------------
輝度のデータの読み込み
-----------------------*/

if ( fscanf(fp, "%d", &bright ) != 1 ){

printf("最大輝度値の読み込みに失敗しました。\n");
return(NULL);

}

if ( bright != MAXVALUE ){

printf("最大輝度値が%dではありません。\n", MAXVALUE );
return(NULL);

}

printf("最大輝度値は%dです。\n", bright );


/*------------------------
ヘッダーの取得完了
------------------------*/

printf("ヘッダーの取得完了\n");





652:デフォルトの名無しさん
07/05/27 06:14:21
/*----------------------------
メモリの確保
----------------------------*/
if ( (im = (int**)malloc(sizeof(int*) * (*ph))) == NULL ) {

printf("メモリが確保できません。\n");
return (NULL);

for ( j=0; j< *ph; j++){

if( (im[j] = (int*)malloc( sizeof(int) * (*pw) )) ==NULL ){

printf("メモリを確保できません。\n");
return(NULL);

}

}

}


printf("メモリ領域が確保できました。\n");




653:デフォルトの名無しさん
07/05/27 06:15:21
/*-----------------------------
画像データの読み込み
-----------------------------*/

for ( j=0; j< *ph; j++ ){
for ( i=0; i< *pw; i++ ){

if ( fscanf(fp,"%d", &temp) != 1 ){

printf("画像データの取得に失敗しました。\n");
return(NULL);

}

im[j][i] = temp;

}
}

return (im);

}


654:デフォルトの名無しさん
07/05/27 08:28:39
>>649
・長いソースはアップローダを使ってくれ。
・その画像ファイルにはコメントは含まれていないか?
試しにエディタで開いてみて、コメントがあるようなら削って味噌。
・そもそもなんでlibpgmでも使わないんだ?

>>648
>647でも指摘されているが、CPU側の事情で巧く動かないだけ。
(x86)アセンブラの勉強をすれば容易に解決する問題。

655:644
07/05/27 11:15:59
>>654
了解です。
「はじめての」シリーズがアマゾンで評価高かったので見てみようかと思います。
あとは、インラインアセンブラで関数作ってその部分だけバイナリで吐き出させて
再び埋め込んでみるのもいいかもしれないです。
シェルコードの解説サイトにソースがあったので使えそうです。
スレ違いな感じですがいろいろ有難うございます。

656:デフォルトの名無しさん
07/05/27 12:40:27
>>649
おそらくポインタ関係でミスってる、てことは分かるでしょ?
>>652 で im != NULL のときどうなるか考えてみ。


657:デフォルトの名無しさん
07/05/27 17:46:45
>>644
EAX の上位ビットをクリアすればいけるかも

658:デフォルトの名無しさん
07/05/27 18:09:00
>>644のは ret のC3がeaxレジスタにmovするときの数値で食われてるから
返ってこないんだよ。

659:デフォルトの名無しさん
07/05/27 18:24:25
>>644
IMMが32bitの場合と16bitの場合を区別するために、
mov ax, 0x123
では、0x66, 0xb8, 0x23, 0x01
とプリフィックスを入れる必要があるみたい。

660:デフォルトの名無しさん
07/05/27 18:29:14
まぁ厳密には関数ポインタは他のポインタと互換性があるとは限らないんだけど

661:デフォルトの名無しさん
07/05/27 18:34:14
確かに…
リニアアドレスであればいいかもしれないが、
データセグメントとコードセグメントなんかに分かれてると
普通に呼び出すのは無理そう

OSのセキュリティレベルが上がってくると
またDOSのようにセグメント毎に分かれるかもしれんし

662:デフォルトの名無しさん
07/05/27 18:45:59
>>660
>>661
こういうことをやる場合は16bit/32bit/64bitで分けるのは当然。
逆にそれを分けてしまえば、ポインタのサイズも
セグメントの問題もどうにでもなると思うけど…

663:デフォルトの名無しさん
07/05/27 18:47:20
16bit/32bit/64bitで分けるっていうのは、
CPUの種類の話ね^^

664:649
07/05/28 09:22:00
みなさん、ありがとうございます。
無事に動かすことができました。


665:デフォルトの名無しさん
07/05/28 10:42:28
クラスのコピーコンストラクタとoperator=って、
実装する処理がまったく同じになることが多いんですけど、
メンバのコピー自体はoperator=だけに書いて、

AAAA::AAAA(const AAAA& rSrc)
{
*this = rSrc;
}

とか書いて処理を合体してしまうことって
やっぱり好ましくないことですか?

666:デフォルトの名無しさん
07/05/28 10:55:56
>>665
代入と初期化は異なる演算です。
コピーコンストラクタでは初期化リストで各メンバのコピーコンストラクタを使いましょう。

667:デフォルトの名無しさん
07/05/28 11:33:02
結果:Strike!

char *pszMsg = "Lucky Strike!";
char *pszHit;
[ 問 ];
printf("%s\n,pszHit");

668:デフォルトの名無しさん
07/05/28 11:37:50
最後の"はそこでいいのか

669:デフォルトの名無しさん
07/05/29 01:31:34
VisualStudio2005でC++をコンパイルした実行ファイルをリバースエンジニアリングできますか?

670:デフォルトの名無しさん
07/05/29 01:37:08
はい、できます。

671:デフォルトの名無しさん
07/05/29 01:47:07
>>669
君には、できません><

672:デフォルトの名無しさん
07/05/29 03:10:42
CLRヘッダが無いと怒られてしまいました。
どうすれば、リバースエンジニアリングできますか?

673:デフォルトの名無しさん
07/05/29 03:16:27
リバースエンジニアになればリバースエンジニアリングできます!

674:デフォルトの名無しさん
07/05/29 03:20:04
馬鹿にはできない不思議なリバースエンジニアリング

675:デフォルトの名無しさん
07/05/29 19:35:08
逆アセンブラはできるけど、逆コンパイルはできない。

676:デフォルトの名無しさん
07/05/29 19:49:18
× 逆アセンブラ
○ 逆アセンブル

× できない
○ それ的な事はできるけど、元のソースを再現できるわけではない

677:デフォルトの名無しさん
07/05/29 20:07:41
ブーメラン ブーメラン

678:デフォルトの名無しさん
07/05/29 20:13:09
64ビットになったらアセンブラでプログラムなんて無理だよね

679:デフォルトの名無しさん
07/05/29 20:13:48
>>678
なんでやねん?

680:デフォルトの名無しさん
07/05/29 20:14:36
めんどくさくない?

681:デフォルトの名無しさん
07/05/29 20:15:00
>>678
ドラスティックな変化があると思っているなら、不勉強にも程がある。

682:デフォルトの名無しさん
07/05/29 20:26:26
eax とかが rax とかになるだけだろ。

683:デフォルトの名無しさん
07/05/29 20:30:51
歳も歳だし、新しく勉強なんてもう俺には無理だよorz
16ビットが恋しい

684:デフォルトの名無しさん
07/05/29 21:14:53
逆アセでollydbg使ってる奴はいないのか?

685:デフォルトの名無しさん
07/05/29 21:49:24
なんだよ

686:デフォルトの名無しさん
07/05/29 22:59:51
16ビットなら人間の手足で数えられるんだな

687:デフォルトの名無しさん
07/05/29 23:39:43
つーか16ビットの方がめんどうだっだろ

688:デフォルトの名無しさん
07/05/29 23:42:06
だっだろ

689:デフォルトの名無しさん
07/05/30 08:45:31
だっだろだっだろ

690:デフォルトの名無しさん
07/05/30 10:24:56
リスクは面倒だっだ

691:デフォルトの名無しさん
07/05/30 12:59:59
フリスクはよかった

692:デフォルトの名無しさん
07/05/30 13:12:08
ロリスクってなんですか?ハァハァ

693:デフォルトの名無しさん
07/05/30 13:24:56
ローリスクっぽい言葉の響きなのに凄くハイリスクな感じがするな。

694:デフォルトの名無しさん
07/05/30 13:27:09
>>693
っ ■■■(座布団)

695:デフォルトの名無しさん
07/05/30 15:02:25
なんら意味のないプログラム

void add(int)
int main(void){
add(2);
return 0;
}

void add(int x){
x=x+1;
}

これ、main関数の中のadd(2)が実行された時点で、
内部だとx==2なので2=2+1になってエラーが起こると思うんだけどおこらない。

main関数の中に
2=2+1;
ってやったらエラーが出て実行できない。

これはなぜ?教えてください

696:デフォルトの名無しさん
07/05/30 15:06:43
>>695
関数へはコピー渡しだからaddを呼んだ時点で2が変数xにコピーされている。
void add(int& x) だとコンパイルエラーにならないか?

697:デフォルトの名無しさん
07/05/30 15:06:58
意味がないなら、どうでもいいじゃないか。( ´∀`)

>内部だとx==2なので2=2+1になってエラーが起こると思うんだけどおこらない。
C/C++ では、引数は値渡しなので
add() 内部で x という変数が 2 になっているだけ。
add() を抜けると、+1 したはずの x は消滅。

698:デフォルトの名無しさん
07/05/30 15:08:10
おいおいw

699:デフォルトの名無しさん
07/05/30 15:09:56
↑誤爆スマソ

700:デフォルトの名無しさん
07/05/30 15:11:53
↓自爆スマソ

701:デフォルトの名無しさん
07/05/30 15:12:26
>>695
そのx=x+1;での=は、数学の授業でやるような等しいという状態を表しているものではなく、
「代入しろ」という動作の命令なのよ。

代入しろという命令だから=の左には代入できるものを書かないとエラー。
だからx=x+1;はokで2=2+1;はエラーになる。

702:デフォルトの名無しさん
07/05/30 22:14:02
CかC++で、整数型のユニークなIDを作るような機能を持ったライブラリってありませんか?

703:デフォルトの名無しさん
07/05/30 22:27:11
>>702
uuid

704:デフォルトの名無しさん
07/05/30 22:32:30
用途が分からんと何とも言えない気がする。

705:デフォルトの名無しさん
07/05/30 23:14:46
unsigned long GenerateUniqueID()
{
static unsigned long id=0;
id++;
return id;
}

706:デフォルトの名無しさん
07/05/30 23:47:21
スレッドセーフじゃないな。

707:デフォルトの名無しさん
07/05/30 23:51:39
unsigned long GenerateUniqueID()
{
static unsigned long id=0;
static int locked=0;

while(locked) msleep(1);
locked=1;
id++;
locked=0;
return id;
}

ミューテックス使わなきゃ駄目?

708:デフォルトの名無しさん
07/05/31 00:06:39
当然なんらかの同期化機構を利用しないとダメ。
スレッドAがwhile(locked)で
"lockedの値をレジスタに取った直後に" スレッドが切り替わり
スレッドBが同様にwhile(locked)を実行したらどうなる?

あと、そのコードはstatic変数の初期化も下手すると二回以上行われるね。

709:デフォルトの名無しさん
07/05/31 00:08:51
いや、、、初期化は実行時じゃ無いぞ・・・
クリティカルセクションでいいな

710:デフォルトの名無しさん
07/05/31 00:17:29
ごめん。C++のつもりで書いてたわ…。

711:デフォルトの名無しさん
07/05/31 00:42:27
最適化でゴッソリ消える予感

712:デフォルトの名無しさん
07/05/31 00:50:34
synchronized

713:デフォルトの名無しさん
07/05/31 02:12:57
C++ にあればねえ

714:デフォルトの名無しさん
07/05/31 02:16:48
>>711
その点については volatile つけとけばおk

715:デフォルトの名無しさん
07/05/31 06:43:11
そういう問題じゃないけどまぁいいか。

716:デフォルトの名無しさん
07/05/31 08:42:34
すいません、この関数って何か間違ってますか?
hairetsu2は、メモリ領域が確保してあり、srand()も関数の外で処理しています。
hairetsu2[j][i] = rand()%2のところで止まります。お願いします。
void rand_point( int **hairetsu2, int row, int line ){

int i, j;

/*** 2次配列の0or1をランダムに格納する ***/
for (j=0; j<row; j++){
for (i=0; i<(1+line); i++){

hairetsu2[j][i] = (rand()%2);

}
}

printf("2次配列にランダムに0or1を格納できました。\n");

}

717:デフォルトの名無しさん
07/05/31 09:06:05
>hairetsu2は、メモリ領域が確保してあり、
どうせちゃんと確保してないに決まってる

718:デフォルトの名無しさん
07/05/31 09:06:36
「止まります」?そもそもコンパイル通らんだろ。

719:デフォルトの名無しさん
07/05/31 09:25:24
コンパイルは通るんですよ↓メモリ確保は、次の関数で確保してます。
void securement2( int **hairetsu2 , int row , int line ){

int i, j;
/*** 2次配列の行を確保する ***/
if (( hairetsu2 = (int **)malloc( sizeof( int* ) * row )) == NULL ){
printf("2次配列のメモリ領域が確保できません。\n");
exit (1);
}
/*** 各行に得点の列を確保する ***/
for ( j=0; j<(row); j++){
if (( hairetsu2[j] = (int*)malloc( sizeof(int) * (1+line) )) == NULL ){
printf("2次配列のメモリ領域が確保できません。\n");
exit (1);
}

/*** 2次配列を0で初期化 ***/
for (j=0; j<row; j++){
for (i=0; i<(1+line); i++){
hairetsu2[j][i] = 0;
}
}
printf("2次配列のメモリ領域が確保できました。\n");
}


720:デフォルトの名無しさん
07/05/31 09:30:00
>>718
根拠は?

>>717
同意。

>>716
その構造だと、メモリはとint配列[line + 1]をrow回とポインタ配列[row]だけ確保する必要があるわけだが。
その部分のコードを晒して味噌。

721:デフォルトの名無しさん
07/05/31 09:30:21
hairetsu2[0][0]だけが格納されて止まるみたいです。hairetsu2[1][1]も格納できないみたいです。


722:720
07/05/31 09:32:01
>>719
あーすまん、やってたのね。
で、止まるってのは具体的にどうなると?

723:デフォルトの名無しさん
07/05/31 09:32:23
>>719
確かにメモリ確保はできてるようだけど、
hairetsu2 をそのまま使うことは出来ない。
変数 hairetsu2 は関数 securement2 を終えた時点で使用不能

724:デフォルトの名無しさん
07/05/31 09:33:06
void securement2( int **hairetsu2 , int row , int line ){

void securement2( int ***hairetsu2 , int row , int line ){

または

void securement2( int **hairetsu2 , int row , int line ){

int **securement2( int row , int line ){
int **hairetsu2;

printf("2次配列のメモリ領域が確保できました。\n");

printf("2次配列のメモリ領域が確保できました。\n");
return hairetsu2;

725:デフォルトの名無しさん
07/05/31 09:44:15
2次元配列も連続した領域である必要があるんだよ。
その配列のアクセスの仕方をやめるか、メモリ確保を一回でやるかどっちかにせい

726:デフォルトの名無しさん
07/05/31 09:45:30
>>725
ちょ…おまw

727:デフォルトの名無しさん
07/05/31 10:29:04
素朴な疑問だが、>>719みたいな奴って「2次元配列」言うの?
確かに同じ形で操作出来た気はするが。

>>725
何に対するレスか非常に疑問。

728:デフォルトの名無しさん
07/05/31 10:36:01
可変長二次元ぬるぽ( ´∀`)

729:デフォルトの名無しさん
07/05/31 11:31:48
>>727
配列のポインタの配列。

730:デフォルトの名無しさん
07/05/31 11:47:39
URLリンク(www.kouno.jp)

731:デフォルトの名無しさん
07/05/31 12:37:24
windows98で
SetPriorityClass(GetCurrentProcess(), ABOVE_NORMAL_PRIORITY_CLASS);
は実行できますか?
実行するとどうなりますか?

732:649
07/05/31 13:10:14
716です。ありがとうございます。ちょっと試してみます。


733:デフォルトの名無しさん
07/05/31 13:37:36
>>731
MSDN読め

734:デフォルトの名無しさん
07/05/31 15:43:09
>>716はダブルポインタ理解してるか?
引数にint **hairetsu2って書いてあるが、ここでダブルポインタにする必要はなにもない。
引数をダブルポインタにするには、関数内でメモリを確保して返すような場合だけだ。
ダブルポインタ=二次元配列じゃないぞ。配列は何次元になってもメモリ内の表現は連続だ。

あとrowとlineは普通どっちも行を意味する。
rowを行とするなら、列の変数名はcolumnの方がいい。

735:デフォルトの名無しさん
07/05/31 17:38:07
>>707
Windows APIのInterlockedIncrementのような関数が使えれば、それを使うのが楽

736:デフォルトの名無しさん
07/05/31 17:52:17
ダブルポインタってなに?

737:デフォルトの名無しさん
07/05/31 17:58:01
1点決めると2点分になる人

738:デフォルトの名無しさん
07/05/31 17:58:22
配列の連続性だけど、
a[3][3] で a[0][2] と a[1][0] の連続性って規格で保証されてたっけ?

739:デフォルトの名無しさん
07/05/31 18:00:11
int**がダブルポインタならこれは何ポインタ?
int*************** nullpo;

740:デフォルトの名無しさん
07/05/31 18:07:56
pentadecuple

741:デフォルトの名無しさん
07/05/31 18:47:40
>>733
読みました。2000以降と書いてありますが、98でどうなるかは書いていません。


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