- 【初心者歓迎】C/C++室 Ver.90【環境依存OK】
451 :デフォルトの名無しさん[]:2014/04/26(土) 08:14:52.42 ID:qVfVXmNl - 以下のコードがコンパイル出来ないのです。
std::make_sharedの引数にthisポインタを使用していることが問題っぽいのですが。。。 どなたかC++にお詳しい方、どうか御教授くださいまし。 #include <iostream> #include <memory> class T; class TS; class TS1; class TS2; class TS { public: virtual ~TS() {} virtual void change() {}; }; class T { public: T() { ts_ = std::make_shared<TS>(); } void f1() { ts_ = std::make_shared<TS1>(this); } // <= ここと void f2() { ts_ = std::make_shared<TS2>(this); } // <= ここに問題がありそうなんです。 void ft() { ts_->change(); } private: std::shared_ptr<TS> ts_; };
|
- 【初心者歓迎】C/C++室 Ver.90【環境依存OK】
452 :デフォルトの名無しさん[]:2014/04/26(土) 08:16:25.20 ID:qVfVXmNl - >>451の続きです
class TS1 : public TS { public: TS1(T* t) : t_(t) {} virtual ~TS1() {std::cout << "TS1 is dead" << std::endl; } virtual void change() { t_->f2(); } private: T* t_; }; class TS2 : public TS { public: TS2(T* t) : t_(t) {} virtual ~TS2() {std::cout << "TS2 is dead" << std::endl; } virtual void change() { t_->f1(); } private: T* t_; }; int main(void) { T t; for (int i = 0; i < 20; i++) { std::cout << i; t.ft(); } std::cout << "END" << std::endl; }
|
- 【初心者歓迎】C/C++室 Ver.90【環境依存OK】
454 :デフォルトの名無しさん[]:2014/04/26(土) 08:22:01.61 ID:qVfVXmNl - shared_ptrに関するエラーが200行以上出てきます...
|
- 【初心者歓迎】C/C++室 Ver.90【環境依存OK】
456 :デフォルトの名無しさん[sage]:2014/04/26(土) 08:57:11.02 ID:qVfVXmNl - すいません >>451 >>452です。
自己解決しました。 単純にstd::make_shared<TS1>とstd::make_shared<TS2>を呼び出す前に TS1とTS2の定義がなされてなかったためエラーが出ただけでした。 あまりにも長いエラーメッセージだったのでとんでもないことをしでかしているのかと焦って質問したのですが、 なんともないような話でした。 すいません。。。 > <
|