boostのshared_ptrについて質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
pocket
記事: 49
登録日時: 4年前

boostのshared_ptrについて質問

#1

投稿記事 by pocket » 4年前

現在boostについて勉強しています。
boost歴は半年ほどです。

クラスのメンバ関数をスレッドでまわそうと考えています。
また、boostでよく用いられるスマートポイントも併用して使用したいです。

ということで、今回単純なクラスの実装を行ったのですが、エラーが出てコンパイルが通りません。

以下、コードになります。

sample.cpp

コード:

#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/thread.hpp>

using namespace std;

class Sample{
public:
  typedef boost::shared_ptr<Sample> ptr;
  Sample():x(0),y(0){};
  static ptr new_(){
    ptr new_(new Sample);
    return new_;
  }
   void start(){
      cout<<"ok"<<endl;
   }

  int x;
  int y;
};

int main(){
  Sample::ptr sample=Sample::new_();
  cout<<sample.x<<endl;
  boost::thread ta(boost::bind(&boost::shared_ptr<Sample>::start(),&sample));
  ta.join();
}


「環境」
VM ware Lubuntu

「実行結果」
g++ sample.cpp -lboost_system -lboost_thread -lpthread
error: 'Sample::ptr' has no member named 'X'
error: 'start' is not a member of boost::shared_ptr<Sample>

問題となっている部分と、解決策についてご教授頂ければ幸いです。

よろしくお願いいたします。

Rittai_3D
記事: 525
登録日時: 7年前

Re: boostのshared_ptrについて質問

#2

投稿記事 by Rittai_3D » 4年前

C++11/14を使えばBoostを使わなくても問題ありません。
http://melpon.org/wandbox/permlink/UamjSFw0KzZr0R80
► スポイラーを表示
Boost 使用ver
http://melpon.org/wandbox/permlink/AgPD5aAcdQkpSgi0
► スポイラーを表示
コード内のコメントにも書きましたが、boost::shared_ptr<> 内にはstart()関数はありません。
(→http://www.boost.org/doc/libs/1_57_0/li ... ed_ptr.htm参考)
pocket さんが書きました:error: 'start' is not a member of boost::shared_ptr<Sample>
このエラーは、それが原因です。
pocket さんが書きました:error: 'Sample::ptr' has no member named 'X'
これは、Sample::ptrのメンバにXがないことのエラーです。

参考にしたサイト
【C++】std::bindの使い方
std::thread::thread
初心者です

pocket
記事: 49
登録日時: 4年前

Re: boostのshared_ptrについて質問

#3

投稿記事 by pocket » 4年前

Rittai_3Dさん

返信ありがとうございます。
また、非常に分かりやすいソースコードも添付して頂き、どの部分が問題なのかが理解できました。

スマートポインタについての知識不足、また基本的な文法の知識が不足しているということが分かりました。

今後も精進していきたいと思います。

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る