- 1 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 20:07:25 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
- 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 っていうのとかって一緒に使えますか?
|

|