スレを勃てるまでもないC/C++の質問はここでat TECH
スレを勃てるまでもないC/C++の質問はここで - 暇つぶし2ch382:デフォルトの名無しさん
07/02/15 14:45:37
そのままの意味です。英語の意味が判らないと言うのであれば、鼬害です。

383:デフォルトの名無しさん
07/02/15 22:56:15
>>381
ウィンドウを正しく終了せず
プログラムの変数(インスタンス)が消されたことにより
正しい手順ではなくCWndのデストラクタが呼ばれたんじゃないの(推測)。

384:377
07/02/16 07:39:55
そうするとcの値は何になるのでしょうか?

385:デフォルトの名無しさん
07/02/16 08:19:55
0.5でしょ。コンパイルタイムに確定するから。

386:デフォルトの名無しさん
07/02/16 12:56:06
>>385
この手の順序依存は規格的には未定義じゃなかったっけ?

387:デフォルトの名無しさん
07/02/16 13:13:40
BCCでインデントするとemacsでやってたのと違ってかなり
スペース空くのですが、こんなもんなんですか?

388:デフォルトの名無しさん
07/02/16 13:22:19
BCCでインデント の意味がわからない。

389:デフォルトの名無しさん
07/02/16 16:54:28
class A{ 
static const double a; 
static const double b; 
static const double c; 
}; 

const double A::a=5;          
const double A::b=c/a; 
const double A::c=a/b; 

じつはこれもコンパイルできてしまったりする。

390:デフォルトの名無しさん
07/02/17 12:40:16
>>389
順序は規定されていないけどコンパイルされる以上、値は決まるわけだね。
その例だとa, b, cの順序に評価される可能性が高そうだから、bは(cが暗黙の初期化で0だから)0、cは∞か。
const double A::c=a+b;
const double A::b=c+a;
const double A::a=5;
こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。
まして複数のコンパイル単位に分かれていたらリンク順序にも依存してしまうのかな。

結論:
評価順序に依存した初期化は鼻から悪魔。constにしないでシングルトンにすべきか。

391:デフォルトの名無しさん
07/02/17 12:41:58
一部訂正:
×こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。
○こうなってたとすると、a, b, cがそれぞれ(cbaの順序で評価して)5, 0, 0なのか(acbの順序で評価して)5, 10, 5なのか悩ましいところだ。



392:デフォルトの名無しさん
07/02/17 23:13:18
gccは確か制御できた様な

393:デフォルトの名無しさん
07/02/19 12:03:31
C言語なんですがwaveを再生させるにはどうすればよいでしょうか?
プログラムが完了したら鳴らしたいのですが・・・。

394:デフォルトの名無しさん
07/02/19 12:18:16
Beep()
…言ってみただけ

395:デフォルトの名無しさん
07/02/19 12:19:02 BE:672138566-2BP(1050)
てst

396:デフォルトの名無しさん
07/02/19 12:19:46
ビープ音鳴らすだけならputchar('\a');
処理系依存だけど

397:デフォルトの名無しさん
07/02/19 14:44:15
演算子の多重定義って使う機会ありますか?

398:デフォルトの名無しさん
07/02/19 15:11:16
自分で使うかどうかはともかく、人が作ったものはよく使う。
一番よく使うのがイテレータに対する操作。
後はstd::basic_stringの比較・連結もよく使う。

399:デフォルトの名無しさん
07/02/19 15:31:16
ビープ音ではなくwavのようなPC内部で鳴る種類が良いです・・・

400:デフォルトの名無しさん
07/02/19 16:00:23
>>399
「wave API」でググれ。

401:デフォルトの名無しさん
07/02/19 16:15:44
waveを再生するってのは結構面倒なのでしょうか?

402:デフォルトの名無しさん
07/02/19 16:32:39
君の面倒なレベルがわからないから回答不能

403:デフォルトの名無しさん
07/02/19 19:12:31
WindowsならMCIかwaveoutかDirectX
質問のレベルからしてMCIがお勧め

404:397
07/02/19 22:35:33
>>398
ありがとうございました。m(_ _)m

405:デフォルトの名無しさん
07/02/20 02:13:35
質問です。
typedef std::map<mykey_t,myval_t> mymap_t;
void hoge(mykey_t k, const mymap_t &m){
 mymap_t::iterator p = m.find(k); // コンパイラエラー
}
constが付いたmapのイテレータを造りたいんですけど、
どうすればいいのですか?

406:デフォルトの名無しさん
07/02/20 03:03:39
>>405
mymap_t::const_iterator p = m.find(k);


407:デフォルトの名無しさん
07/02/22 13:38:18
>>381
今さらながらマジレス
Warning: calling DestroyWindow in CWnd::~CWnd;
OnDestroy or PostNcDestroy in derived class will not be called.
[翻訳]
CWndから派生クラスのウィンドウを使っているときに、
規定クラスのCWnd::~CWndデストラクタが呼ばれているので
派生クラス側のOnDestroyやPostNcDestroyハンドラが呼ばれませんですのよ。うふ

ウィンドウ破棄するときに派生クラス->DestroyWindowを呼んでない悪寒です。

408:デフォルトの名無しさん
07/02/23 11:42:39
文字と数字が入力された時に、数字だけを消して
文字だけ表示したいんですけど、どうやればいいのでしょうか?

void del_digit(char *str){
while(*str)
/*ここでどうすれば?*/
putchar(*str++);
}
int main(void){
char str[100];
printf("mojinyu-ryoku:"); scanf("%s",str);
printf("DelDigit:");
del_digit(str);
putchar('\n');
return(0);
}

409:デフォルトの名無しさん
07/02/23 12:22:44
if (isdigit(*str))

410:408
07/02/23 13:05:39
>409

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

411:デフォルトの名無しさん
07/02/23 16:03:53
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。

412:デフォルトの名無しさん
07/02/23 21:26:09
>>411
そうか

413:デフォルトの名無しさん
07/02/25 19:10:07
ユーザー一人一人に別々のシリアルナンバーを割り当てたいのですが、
どのように生成し、ソフト側ではどのようにそれをチェックすればよいのでしょうか?

414:デフォルトの名無しさん
07/02/25 19:45:45
ユーザー特有情報(メールアドレスとか)を秘密鍵で暗号化して、
ソフトに内蔵の公開鍵で復号できたらOK、とか?

415:デフォルトの名無しさん
07/02/25 19:56:51
うんにゃ、クラックから守るにはクラッカーの手口を知る必要がある。
リバースエンジニアリングの本でも買って読んだ方が良いぞ。相手は『強力なデバッガ』使いだからな。
ロジックの流れなんか直ぐに分かってしまう。まずは低水準なレベルで防御しなければならん。
認証用の関数はプログラム処理の流れから完全に分離、関数のアドレスを入れているポインタのconst変数には定数NULLを入れておき、
ifで関数ポインタ変数がNULLじゃなかったらアドレス先の認証関数を実行、とすると良いかもしれん。
これなら認証用関数の手がかりはほとんど無いからな。ダミーの関数でラップしておけば更に頑丈になる。
NULL定数を正常な認証用関数アドレスに書き換えるパッチをユーザーに配る必要があるが、
ユーザー名をキーに若干絡ませて暗号化とかしておけ。

416:デフォルトの名無しさん
07/02/25 20:03:43
なにいってるの?

417:デフォルトの名無しさん
07/02/25 20:20:15
>>415はアレだ。
物事を最初だけ聞いて「みなまで言わずとも分かった」と暴走するタイプだ。

418:デフォルトの名無しさん
07/02/25 22:50:20
単にWizardBibleとか読んでわかった気になってるだけだろ

419:デフォルトの名無しさん
07/02/25 23:34:20
江戸っ子は気が短いんでい!

420:デフォルトの名無しさん
07/02/26 01:25:29
>>415 の言ってるようにクラック対策なら、↓こっちのスレで相談しなさい。

クラッキングの勉強の仕方を教えてください
スレリンク(tech板)


421:デフォルトの名無しさん
07/02/26 20:35:33
VC++自体よくわからんが
ゲーム制作で俗に言うC++ってVC++のこと?
ゲーム制作の参考書買いに行ったがVC++ばっかりで混乱・・・
ちなみにC++の基礎はマスターした。

422:デフォルトの名無しさん
07/02/26 20:41:19
まあ、Windows対象のC++本ならほとんどはVC++を想定して書かれてると思ってもいいんじゃないかな。

423:デフォルトの名無しさん
07/02/26 20:47:30
趣味と実益(基本情報技術者の試験)を兼ねてc言語を勉強しようと思います。
フリーコンパイラ使おうと思うんですがどれがいいでしょうか?
VisualStudio Expressで問題ないですか?

424:デフォルトの名無しさん
07/02/26 20:53:55
趣味ならIDEも付いてるし、VC++でいいんじゃね?

425:デフォルトの名無しさん
07/02/26 21:23:33
夢を壊すようで悪いけど
基本情報は何の実益にもなりません

426:デフォルトの名無しさん
07/02/26 21:29:22
おいらのところは資格手当がでるよ

427:デフォルトの名無しさん
07/02/26 21:33:03
実益というか「そんなのも取ってねぇのかよ」
といわれる会社もあるにはある

428:デフォルトの名無しさん
07/02/26 22:43:59
>>442
サンクス
やっぱりVC++も頭に入れながらやってみる。

429:デフォルトの名無しさん
07/02/26 23:06:02
WindowsならVC++かgccの二択だわな

430:デフォルトの名無しさん
07/02/27 00:46:54
>>429
それを言うならVCかICCの二択だろ。
この期に及んでgcc使うヤツなんていないって。

431:デフォルトの名無しさん
07/02/27 01:02:56
icc高すぎ

432:デフォルトの名無しさん
07/02/27 01:13:14
>>431
じゃ、VCで我慢汁。

433:デフォルトの名無しさん
07/02/27 16:50:30
>> 430

BCC + BCC Developer は?
もしかして却下?

Turbo Debbuger まで全部タダでそろうが…。

BCC Develoer のクラスでSTL使えたか忘れたが…。

434:デフォルトの名無しさん
07/02/27 16:54:18
>>433
STLも使えたはず。


435:デフォルトの名無しさん
07/02/27 17:00:16
>> 434

そうですか!情報提供ありがとうございます。
VCのMFCでは文字列クラスがSTLと共存できない使用だったはず…
最新バージョンでは使えるようになったのかな??
使えないなら BCC の方がよさそうに思いますが…。

436:デフォルトの名無しさん
07/02/27 17:19:16
Borland C++よりVC++ (7.1以上)の方がテンプレートがまともに使える。
STLを使えるかどうか気にするなら、それだけでVC++を選ぶには十分。
MFCとの相性が悪いなら、むしろMFCなんて捨ててしまえ。

437:デフォルトの名無しさん
07/02/27 17:21:18
Cコンパイラとして使うならbccよかgccのほうがマシだろ

438:デフォルトの名無しさん
07/02/27 17:31:37
>> 436

たしかに自分使ってない。

>> 437

gcc は使ったこと無くて…

439:デフォルトの名無しさん
07/02/27 17:44:30
BCCはいまだにC++コンパイラではない
Boostの些細なライブラリが通らないので
C++を知っている人間なら薦めない
(某サイトは特集していたが)
MFCがBoostやSTLやだれそれと共存できないなんてことはない

440:デフォルトの名無しさん
07/02/27 17:47:44
>> 439

いえ自分が言っていたのは MFC内で使われている 文字列クラスと
STL の string クラスの互換性の話…。

MFCをポイすれば悩むこと無いでしたが…

441:デフォルトの名無しさん
07/02/27 17:55:10
>>440
MFCの文字列クラスとSTLのそれを混在させなきゃいいだけの話じゃないの

442:デフォルトの名無しさん
07/02/27 18:10:26
>>440
文字列に限らずコンテナ類も互換性がないが、それより
「互換性がない」と「共存できない」じゃまるで意味が違うだろが。

443:デフォルトの名無しさん
07/02/27 18:14:12
たしかにMFCのCStringTとstd::basic_stringは別物だが、
相互に変換できないわけではないし、
Boost.Range(或いはイテレータ)では統一的に扱えるんだから、
そこまで気にすることは無いと思う。

444:デフォルトの名無しさん
07/02/27 19:00:22
>> 443

参考になりました。ありがとうございます。


445:デフォルトの名無しさん
07/02/27 19:33:39
template<class T>class A{
 private: T na;
 public: A(T a):na(a){};
 friend A<T> operator + <T>(A<T>&,const A<T>&);
};
template<class T>class B{
 private: T nb;
 public: B(T b):nb(b){};
  friend B<T> operator + <T>(B<T>&,const B<T>&);
};

template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}
でBのメンバ変数にアクセスできないのはなぜ--??

446:デフォルトの名無しさん
07/02/27 20:23:37
>> 445

template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}

template<class T>A<T> A<T>::operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> B<T>::operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}

とすればいいのでは?

447:デフォルトの名無しさん
07/02/27 21:03:12
friend関数なのでそれでも無理っぽいです。

448:デフォルトの名無しさん
07/02/27 23:08:00
int x;
int &rx = x;

これおかしくね?
&rx = x; 何でアドレスにint型の変数を代入するの

449:デフォルトの名無しさん
07/02/27 23:08:45
「参照」を知らない香具師は基礎からC++やり直せ

450:デフォルトの名無しさん
07/02/27 23:45:33
(int &)rx=x;
rはreferenceのr
宣言時に型の直後に&をつけたものは参照型になる
嘘です

451:デフォルトの名無しさん
07/02/28 13:09:55
ネットで落としてきたcppファイルとdefファイルを使ってdllを作成したいんだけど、
やり方がよくわかりません。

ぐぐって見たところ、
ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library or MFC Appwizard(dll) を選んで
もにょもにょするって書いてあったんですが、↑の時点で2種類のやり方があってどっちが正解かわからないですし、
そもそも貰ったファイルをdll化することが目的なので新規作成からやるのは何か間違っている気がします。

とりあえずcppファイルを開いてコンパイルして、、、defファイルをプロジェクトに追加。
そして再度コンパイルをしてみても・・・無理でしたorz

どなたか助言をお願いします…

環境はvisual V++ 6.0 Standard Editionです。
よろしくお願いします。

452:デフォルトの名無しさん
07/02/28 13:14:23
>>451
dllを新規作成するからあってるのでは?
そのdllプロジェクトにソースを追加してモニョモニョするんだと思うんだけど。

453:451
07/02/28 13:35:42
うは…なるほど、そういう解釈ですか…

とりあえず
ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library
を選んで空のDllオブジェクトを選択して(この時点で意味不明ですが…他選ぶとどうなるの…?)

プロジェクトの追加でcppを選んでビルドしてみたら何故かdllファイルが出来上がっていました
個人的にはキタ━━(゚∀゚)━━!!!!
でもどうなってんのか全然だ(ノ∀`)

dllにもフォーマットがあって、cppファイルに則したやり方じゃないとうまく生成されないのだろうか。
ちなみにMFC Appwizard(dll)の方で作ろうとしたら、エラーがでて生成されませんでした。なんでやねん(;´Д`)

それ以前に先ほどDllを作成したときには、プロジェクトの追加でcppファイルを追加したわけですが、
defファイルは追加しなくてもいいんでしょうか?
勝手に追加されるから特に選択する必要はないということでしょうかね・・・(ソースによりけりなのかもしれないけれど)

454:デフォルトの名無しさん
07/02/28 14:19:10
def ファイルは関数のエクスポートに必要
__declspec(__dllexport) を関数につけてないのなら
def無しで作った場合、出来上がったDLLはどこからも呼べないものになってると思うが
depends.exe 持ってないか?

455:451
07/02/28 15:00:26
depends.exeとはDependency Walkerのことなのかな…?

とりあえず、defファイルを追加せずにdll化するとまずそうなので、先ほどの手順で
プロジェクトの追加からcppファイルとdefファイルの両方を追加して見ました。
すると…エラーなしでdll化キタ━━(゚∀゚)━━!!!!

これで関数もエクスポートできるようなまともなdllになったのかな…

とりあえずDependency Walkerを起動してみて調べたところ、左のツリー状のところに
TEST.dll
  l
  -KERNE32.dll
     l
     -NTDLL.dll

ってなってました。自分にはさっぱりですが、正常にdll化できたと思ってよいのでしょうか(;´Д`)?

456:デフォルトの名無しさん
07/02/28 15:13:48
DLLの関数のエクスポートのやり方は2種類あるのよ
・関数に__dllexportを付ける
・.defファイルに纏めてエクスポートする関数を書く。
どっちでもおk。俺は見やすいからdefの方でやる。

457:451
07/02/28 15:41:47
なるほど…
まだまだ不勉強なようですね。
でも、ねんがんのdllをてにいれることができたので、レスを下さった方々にはお礼を言いたいと思います。

どうもありがとうでした・゜・(ノA`)・゜・

458:デフォルトの名無しさん
07/02/28 16:58:10
>>455
そのTest.dll にカーソルあわせたら
右の下のFunction に一覧出るべ
それがエクスポートされたやつね。

459:デフォルトの名無しさん
07/02/28 17:29:16
今日からマイクロソフトのVisualC++2003をし始めたんですが、どこかのサイトで
見つけた同じC++の例文とか書いてみても実行したとたん画面が消えるのはなぜですか?

printf とか cout っていうのとかって一緒に使えますか?


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