- 1 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 20:07:25 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
- 433 名前:デフォルトの名無しさん [2007/02/27(火) 16:50:30 ]
- >> 430
BCC + BCC Developer は? もしかして却下? Turbo Debbuger まで全部タダでそろうが…。 BCC Develoer のクラスでSTL使えたか忘れたが…。
- 434 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 16:54:18 ]
- >>433
STLも使えたはず。
- 435 名前:デフォルトの名無しさん [2007/02/27(火) 17:00:16 ]
- >> 434
そうですか!情報提供ありがとうございます。 VCのMFCでは文字列クラスがSTLと共存できない使用だったはず… 最新バージョンでは使えるようになったのかな?? 使えないなら BCC の方がよさそうに思いますが…。
- 436 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:19:16 ]
- Borland C++よりVC++ (7.1以上)の方がテンプレートがまともに使える。
STLを使えるかどうか気にするなら、それだけでVC++を選ぶには十分。 MFCとの相性が悪いなら、むしろMFCなんて捨ててしまえ。
- 437 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:21:18 ]
- Cコンパイラとして使うならbccよかgccのほうがマシだろ
- 438 名前:デフォルトの名無しさん [2007/02/27(火) 17:31:37 ]
- >> 436
たしかに自分使ってない。 >> 437 gcc は使ったこと無くて…
- 439 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:44:30 ]
- BCCはいまだにC++コンパイラではない
Boostの些細なライブラリが通らないので C++を知っている人間なら薦めない (某サイトは特集していたが) MFCがBoostやSTLやだれそれと共存できないなんてことはない
- 440 名前:デフォルトの名無しさん [2007/02/27(火) 17:47:44 ]
- >> 439
いえ自分が言っていたのは MFC内で使われている 文字列クラスと STL の string クラスの互換性の話…。 MFCをポイすれば悩むこと無いでしたが…
- 441 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:55:10 ]
- >>440
MFCの文字列クラスとSTLのそれを混在させなきゃいいだけの話じゃないの
- 442 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:10:26 ]
- >>440
文字列に限らずコンテナ類も互換性がないが、それより 「互換性がない」と「共存できない」じゃまるで意味が違うだろが。
- 443 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:14:12 ]
- たしかにMFCのCStringTとstd::basic_stringは別物だが、
相互に変換できないわけではないし、 Boost.Range(或いはイテレータ)では統一的に扱えるんだから、 そこまで気にすることは無いと思う。
- 444 名前:デフォルトの名無しさん [2007/02/27(火) 19:00:22 ]
- >> 443
参考になりました。ありがとうございます。
- 445 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:03:12 ]
- friend関数なのでそれでも無理っぽいです。
- 448 名前:デフォルトの名無しさん [2007/02/27(火) 23:08:00 ]
- int x;
int &rx = x; これおかしくね? &rx = x; 何でアドレスにint型の変数を代入するの
- 449 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:08:45 ]
- 「参照」を知らない香具師は基礎からC++やり直せ
- 450 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:45:33 ]
- (int &)rx=x;
rはreferenceのr 宣言時に型の直後に&をつけたものは参照型になる 嘘です
- 451 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 13:14:23 ]
- >>451
dllを新規作成するからあってるのでは? そのdllプロジェクトにソースを追加してモニョモニョするんだと思うんだけど。
- 453 名前:451 mailto:sage [2007/02/28(水) 13:35:42 ]
- うは…なるほど、そういう解釈ですか…
とりあえず ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library を選んで空のDllオブジェクトを選択して(この時点で意味不明ですが…他選ぶとどうなるの…?) プロジェクトの追加でcppを選んでビルドしてみたら何故かdllファイルが出来上がっていました 個人的にはキタ━━━━(゚∀゚)━━━━!!!! でもどうなってんのか全然だ(ノ∀`) dllにもフォーマットがあって、cppファイルに則したやり方じゃないとうまく生成されないのだろうか。 ちなみにMFC Appwizard(dll)の方で作ろうとしたら、エラーがでて生成されませんでした。なんでやねん(;´Д`) それ以前に先ほどDllを作成したときには、プロジェクトの追加でcppファイルを追加したわけですが、 defファイルは追加しなくてもいいんでしょうか? 勝手に追加されるから特に選択する必要はないということでしょうかね・・・(ソースによりけりなのかもしれないけれど)
- 454 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 14:19:10 ]
- def ファイルは関数のエクスポートに必要
__declspec(__dllexport) を関数につけてないのなら def無しで作った場合、出来上がったDLLはどこからも呼べないものになってると思うが depends.exe 持ってないか?
- 455 名前:451 mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 15:13:48 ]
- DLLの関数のエクスポートのやり方は2種類あるのよ
・関数に__dllexportを付ける ・.defファイルに纏めてエクスポートする関数を書く。 どっちでもおk。俺は見やすいからdefの方でやる。
- 457 名前:451 mailto:sage [2007/02/28(水) 15:41:47 ]
- なるほど…
まだまだ不勉強なようですね。 でも、ねんがんのdllをてにいれることができたので、レスを下さった方々にはお礼を言いたいと思います。 どうもありがとうでした・゜・(ノA`)・゜・
- 458 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:58:10 ]
- >>455
そのTest.dll にカーソルあわせたら 右の下のFunction に一覧出るべ それがエクスポートされたやつね。
- 459 名前:デフォルトの名無しさん [2007/02/28(水) 17:29:16 ]
- 今日からマイクロソフトのVisualC++2003をし始めたんですが、どこかのサイトで
見つけた同じC++の例文とか書いてみても実行したとたん画面が消えるのはなぜですか? printf とか cout っていうのとかって一緒に使えますか?
- 460 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 21:40:45 ]
- 終了したらウィンドウが消えるのは当たり前だろ…
- 461 名前:デフォルトの名無しさん [2007/02/28(水) 22:54:40 ]
- Cのポインタについてなのですが
int c; int *p; /* ポインタの宣言 */ c = 1; p = &a; とすると、pにaのアドレスを代入 *p = 1; ならpの中のアドレスのさす変数aに1を代入 ですよね? *がない場合はアドレスを入れるものだと思ってたのですが 文字列を扱うときには char *p = "ABC"; 宣言時だろ*があったのですが 後から代入するときには char *p; p = "ABC"; という風に*がありませんでした アドレスの代わりにABCが入ってるのですか? どのような解釈をすればよろしいのでしょうか 教えてください
- 462 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:02:30 ]
- char *p = "ABC";は「char *」という型の変数pを宣言していると考えろ。
*をcharではなくpのほうへにくっつけて書くのは慣習的な理由。 こう書いても同じ意味になる。 typedef char * pchar_t; pchar_t p = "ABC";
- 463 名前:デフォルトの名無しさん [2007/02/28(水) 23:35:19 ]
- 宣言時代入と、後から代入が同じということはわかりました、ありがとうございます
では *p = 1でaに代入されるのはどういうことでしょうか? *とpを書いているのは、アドレスの指す変数に代入と考えていいのでしょうか? それと p = "ABC"; の場合はアドレスの代わりにABCが入っていると考えていいのでしょうか?
- 464 名前:デフォルトの名無しさん [2007/02/28(水) 23:39:11 ]
- OS:Windows XP Professional Version 2002 Service Pack 2
開発環境:Microsoft Visual C++ 6.0 ===やりたいこと=== ChemDrawという化学構造を描画するソフトウェアのファイルフォーマットであるcdx形式のファイル(バイナリ)を読み込みたい ===これまでに実施した内容=== まず、CDXファイルフォーマットに関しては以下のページに書かれています。(英語) www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/index.htm その内、バイナリファイルを読み込む際に事前に定義されたヘッダーファイルが以下のページのファイルです www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/IntroCDX.htm のリンクにある www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/CDXConstants.h のファイルがcdxファイルフォーマットを読み込む際に使用するヘッダーファイルです。この中で typedef UINT16 CDXTag; typedef INT32 CDXObjectID; // signed for now, due to mac compiler bug? という行があるのですが、私の開発環境ではUINT16とINT32という型が存在しないため、コンパイルをしても c:\hogehoge\cdxconstants.h(54) : error C2146: 構文エラー : ';' が、識別子 'CDXTag' の前に必要です。 とエラーが出てしまいます。そこでUINT16ってなんだ?ってことを調べ始めて、 ・UINT16は16bitのUINT ・「.NET Framework クラス ライブラリ」 においてUINT16は定義されているらしい msdn2.microsoft.com/ja-jp/library/system.uint16(VS.80).aspx ってところまでは分かったのですが、何をしたらいいのかお手上げ状態になってしまいました。 とりあえず、このヘッダーファイルがコンパイルで通るようにしたいです。よろしくおねがいします。
- 465 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:42:32 ]
- UINT16は最近のPlatform SDKに入っている
<windows.h>(の中でインクルードされているファイル)の中で宣言されている。 今回のものと.NET Frameworkのは関係ない。 手っ取り早く対処するなら、 そのヘッダをインクルードするより先に自分で宣言してしまえばよい。 typedef unsigned __int16 UINT16; typedef __int32 INT32;
- 466 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:45:54 ]
- >>463
> int * pa; // (A) 変数paはintへのポインタであることを示す。 > *pa = 1; // (B) > b = *pa; // (B) *paの*は、ポインタpaが指す場所に対して代入したり値を取り出したりする。 俺の推測だが (A)と(B)の*を無理やり同じ意味にしようとしているのか。
- 467 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:50:01 ]
- >>463
char *p; と宣言している以上は、 ポインタpに入れられるのは(char *)だよ。 "ABC"だってどこかのメモリに存在するわけで アドレスがあるよ。
- 468 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:52:21 ]
- >>461
> p = &a; > とすると、pにaのアドレスを代入 > *p = 1; > ならpの中のアドレスのさす変数aに1を代入 > ですよね? そうだね
- 469 名前:464 [2007/02/28(水) 23:55:46 ]
- >>465
おおお動きました^^; 最終的に typedef unsigned __int16 UINT16; typedef unsigned __int32 UINT32; typedef __int32 INT32; の3行追加で何とか認識できました。 ありがとうございました!!
- 470 名前:463 461 [2007/03/01(木) 00:04:47 ]
- >>466
同じ意味かと思ってました 理解できました ありがとうございました >>467 納得できました、ありがとうございました >>468 ありがとうございます 皆さん本当にありがとうございました
- 471 名前:471 mailto:sage [2007/03/01(木) 00:12:14 ]
-
/************************************************************************/ /* 機能 : port5のLEDを交互に点滅させる。 */ /* */ /* 作成日 : 2007/2/27 */ /* 作成者 : 佐々木 */ /************************************************************************/ 作ったプログラムソースをメモリーステックに保存して、別のパソコンでソースを 開いたら、 こんなにレイアウトが崩れてしまいます。 使っているコンパイラはBCCとGCCなのですが、 どうしたらいいですか?
- 472 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:18:21 ]
- >>466
> (A)と(B)の*を無理やり同じ意味にしようとしているのか。 そういうこと。「『*pがchar型になる』と読める」というような説明はよく見かける気がする。 ttp://kmaebashi.com/programmer/pointer.html > K&Rによれば、Cの宣言は、「変数が現われ得る式の構文を真似た(P.114)」そうである。 > しかし、本質的に全く異なるものを無理に似せようとしたため、 > 結局わけのわからない構文になってしまっている。
- 473 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:21:10 ]
- >>471
ソースは同一でパソコンを変えただけなんだね。 使用しているエディタが違うとかフォントが違うとかじゃないの。
- 474 名前:471 mailto:sage [2007/03/01(木) 00:30:18 ]
- フォントをいじればいいのですね。
スペースとかTabで崩れてると思うし。
- 475 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:37:01 ]
- >>474
タブがスペース何文字分なのかは迷惑な話だよね。
- 476 名前:471 mailto:sage [2007/03/01(木) 00:51:51 ]
- 文字サイズをいじっても良くはなりませんでした。
そのTabがスペース何文字分かを設定するのはどこからですか?
- 477 名前:471 mailto:sage [2007/03/01(木) 00:59:41 ]
- 漏れ的には、
関数の紹介文は /*************/ /*___________*/ こんな感じでアスタリスク埋めして正確な文字数が出てるし、 TABは避けるべきだったかなと思いますた。 文頭はいいとは思うけど。 char *NEET; みたいに。
- 478 名前:デフォルトの名無しさん [2007/03/01(木) 02:32:22 ]
- deleting Debugって出てメイクできないんですが、イミフです
ググったら全角スペースが原因とかプロジェクト設定をwinにすれば良いとか 出てたのですが、何やってもダメです。 ちなみにReleaseだと実行できます。 何が原因なのでしょう・・・? コンパイラはbccです。
- 479 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 05:01:02 ]
- >>478
bccを捨てるのはどうでしょう。 >>477 囲う手間の割りに見栄えがよくないので、左側だけにすることをお勧めします。 ついでにDoxygenコメントを埋めてこんな感じ。 //////////////////////////////////////////////////////////////// /// \brief あーたら処理 /// /// なにやら処理するらしい。 /// \param[in] para パラメータ構造体 /// \return 処理結果 /// \author だれそれ /// \date いついつ // 説明を書き換えるだけで右側の桁を揃え直す手間を掛けるなんてナンセンスですよ。
- 480 名前:デフォルトの名無しさん [2007/03/01(木) 09:19:13 ]
- class classname
{ classname(): root(0) {....} } とあったんですが、この書式って正しいんですか?正しければ意味とか説明があるサイトを紹介してくださいませ。 僕の持ってる本にはこのような書き方が載ってないです。。 (標準講座C++)
|

|