- ベストアンサー
shared_ptr クラスについて
shared_ptrクラスを使いたいのですが、使えません、どうしてでしょうか?ソースはこれです。 #include<iostream> #include <string> #include <fstream> #include<memory> using namespace std; class SMonster{ string name; int power; public: SMonster(); SMonster(int p); ~SMonster(){ }; void SetPower(int p); int GetPower(SMonster& t)const; void walk(const string& str); int GetPoint(void)const; }; class B {}; class D : public B {}; int main(void) { shared_ptr<D> sp0(new D); SMonster m(200); SMonster n(100); std::cout<<m.GetPower(m)<<std::endl; std::cout<<n.GetPower(n)<<std::endl; ShowWindow(10); }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
そのURLは「Visual Studio 2008」の「標準 C++ ライブラリ TR1 拡張リファレンス」説明ページですが、VC2008をお使いですか。 回答に「\visual studio 2005\」とありますが、元々新規C++仕様策定中のお試しなので、 VC2008のSP1 (元はFeature Pack)の追加機能なので、2005では使えません。(指摘済) http://msdn.microsoft.com/ja-jp/library/bb982198.aspx 「TR1 拡張は、Visual Studio 2008 Service Pack 1 (VS2008 SP1) の新機能の一部として提供されています。 VS2008 SP1 の入手方法については、http://msdn.microsoft.com/ja-jp/library/e2h7fzkw(ja-jp,VS.90).aspx を参照してください。」 また、もしVC2008に乗り換える場合でも、 そのページには、「名前空間 : std::tr1」と書いてあります。 つまり、shared_ptrは、std::shared_ptrではなく、std::tr1::shared_ptrです。 よって、using namespace std;ではusingの対象になりませんから、 まず、using namespace std::tr1;である必要があります。(指摘済)
その他の回答 (4)
- MrBan
- ベストアンサー率53% (331/615)
> 回答ありがとうございます。MSDNで調べたら、 > <memory>をインクルードすれば、できるようなことが載っていたのですが。 そのページは何処ですか? 「できるようになるだろう」ではなくて「できる」ですか? #3の方もかかれてますがshared_ptrの仕様もまだ正式には決まってませんし、 VC(2008の最新)でもtr1でしか使えないはずですが…。 (namespace stdではなくnamespace std::tr1になりますのでusingするならこちらも) または、boostを別途インストールしていれば、boost::shared_ptrがあるのですが、 インストールやincludeパス設定せずに書いてませんか?>boost::shared_ptr
お礼
回答ありがとうございます。Uboostはインストールしていません。RLはhttp://msdn.microsoft.com/ja-jp/library/bb982026.aspxです。
- Tacosan
- ベストアンサー率23% (3656/15482)
Visual Studio 2008 ではまだ shared_ptr はないはずなんだけど.... どのような情報か, URL はわかりませんか?
お礼
回答ありがとうございます。http://msdn.microsoft.com/ja-jp/library/bb982026.aspxで見かけました。
- MrBan
- ベストアンサー率53% (331/615)
「使えない」とはどういうことですか? 現時点では、shared_ptrは標準ではありませんが、どちらのshared_ptrを使ってますか? コンパイルエラーなら、ヘッダはインクルードしてますか? (例:Boostをインストールしているなら#include <boost/shared_ptr.hpp>とか、<tr1/memory>とか…) 例えばstd::tr1::shared_ptrとか(boostなら)boost::shared_ptrと書いても同様ですか。
お礼
回答ありがとうございます。MSDNで調べたら、<memory>をインクルードすれば、できるようなことが載っていたのですが。std::tr1::shared_ptrとか(boostなら)boost::shared_ptrと書いてみても駄目でした。
補足
使えないとは、shared_ptrクラスが定義できないと言うことです。 c:\documents and settings\mycomputer\my documents\visual studio 2005\projects\smonst1\smonst1\main.cpp(45) : error C2065: 'shared_ptr' : 定義されていない識別子です。 処理系はVC++です。言葉足らずですいません。
- Tacosan
- ベストアンサー率23% (3656/15482)
このソースを見せて, あなたは何をしたいのですか? 「使えない」と言っていることからすると, ひょっとして何らかの問題が起きていてそれを解決したいと思っているのでしょうか? もしそうなら, あなたには書かなければならないこと (そして書けなければならないこと) がもっといっぱいあります. 例えばどこでどのような問題が起きていて, 本当はどうなるはずであるだとか, あなたがどの処理系を使っているのかとか, それくらいは書いて当然ですよね.
お礼
どうもすみませんでした。 ご指摘ありがとうございます。 参照カウントを使ってリソースを管理するオブジェクト作りたいのですが、こんなエラーが出ます。 c:\documents and settings\mycomputer\my documents\visual studio 2005\projects\smonst1\smonst1\main.cpp(45) : error C2065: 'shared_ptr' : 定義されていない識別子です。 c:\documents and settings\mycomputer\my documents\visual studio 2005\projects\smonst1\smonst1\main.cpp(45) : error C2275: 'D' : この型は演算子として使用できません c:\documents and settings\mycomputer\my documents\visual studio 2005\projects\smonst1\smonst1\main.cpp(42) : 'D' の宣言を確認してください。 c:\documents and settings\mycomputer\my documents\visual studio 2005\projects\smonst1\smonst1\main.cpp(45) : error C3861: 'sp0': 識別子が見つかりませんでした このshared_ptrを使うにはどうしたらいいのでしょうか? 処理系はVC++です。
お礼
そうだったのですか。わかりました。回答ありがとうございました。