トップページ > プログラム > 2014年04月26日 > qVfVXmNl

書き込み順位&時間帯一覧

18 位/201 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000040000000000000004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【初心者歓迎】C/C++室 Ver.90【環境依存OK】

書き込みレス一覧

【初心者歓迎】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の定義がなされてなかったためエラーが出ただけでした。

あまりにも長いエラーメッセージだったのでとんでもないことをしでかしているのかと焦って質問したのですが、
なんともないような話でした。
すいません。。。 > <


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。