@egtraイグトランスの頭の中(のかけら)ActiveBasicを中心にプログラミングの話をぼちぼちと。shared_ptr.コメントなしboost::shared_ptrで少し不思議な挙動に出会いました。下のコメントアウトを外すとコンパイルが通る。下のコメントアウトを外すとコンパイルが通る。}bの初期化で使用しているコンストラクタは、ポインタの値はd.getB()だけど参照カウントはdを共有するというものです。銀天随筆集の「応用的な使い方」にあります。これは特に問題ない(コンパイルエラーになるコードではない)と思うのですが、DからBへの変換が曖昧だということでエラーになってしまいました。これが遭遇した少し不思議な挙動です。解決方法は、2つ見つけました。1つは、上記ソースコードに書いてあるように、BOOST_SP_NO_SP_CONVERTIBLEを定義するという方法です。エラーメッセージに出力されたソースファイルboost/smart_ptr/detail/sp_convertible.hppを開いたところ、見つけました。1つはboost::shared_ptr<void>を介す方法です。BOOST_SP_NO_SP_CONVERTIBLEの定義が望ましいエラーチェックまで無くしてしまうことを危惧するなら、こちらが良いと思います。boost::static_pointer_cast<B1>(d);などとすれば大丈夫です、一応念のため。コメントをキャンセルメールアドレスが公開されることはありません。WPThemes.Info。