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 っていうのとかって一緒に使えますか?