質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3433閲覧

(C++) vectorでのshrared_ptrのno matching constructorエラー

motimotio

総合スコア14

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/08/06 14:27

編集2019/08/06 14:59

現在、C++について勉強しています。

そこで自作のクラスに対しshapred_ptrを使用したところ、コンストラクターのエラーが出ました。
実行環境はclang++,-std=c++17でコンパイルを行っています。

クラスHogeのshared_ptrであるhogesを作成し、そこに他のshared_ptrである_hogesを追加するプログラムを作成しようとしています。

よろしくお願いします。

C++

1#include <iostream> 2#include <vector> 3 4class Hoge{ 5public: 6 Hoge(){}; 7 ~Hoge(){}; 8}; 9 10class Aggrecate{ 11public: 12 std::vector<std::shared_ptr<Hoge>> hoges; 13 Aggrecate(){}; 14 Aggrecate(const std::shared_ptr<Hoge> _hoges) : hoges(_hoges){}; 15 16 void add(const std::shared_ptr<Hoge>& s) { 17 hoges.push_back(s); 18 } 19}; 20 21 22int main() { 23 24 return 0; 25} 26

C++

1//エラー内容 2error: no matching constructor for initialization of 'std::vector<std::shared_ptr<int> >' 3 Aggrecate(const std::shared_ptr<int> & _nums) : nums(_nums){};

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHOMI

2019/08/06 14:34

エラーとソースが食い違っているようですが…
guest

回答1

0

ベストアンサー

エラーとソースが食い違っているので提示されたソースが正しいものなのかわかりませんが、

C++

1 std::vector<std::shared_ptr<Hoge>> hoges;

C++

1 std::shared_ptr<Hoge> hoges;

の間違いでは?

と書いてから気づきましたが、vectorに格納したいということなので
別のshrared_ptrもあとから追加される可能性があり、コンストラクタではvectorの1要素目として格納したいということでしょうか。
そうであれば以下ですかね。

C++

1Aggrecate(const std::shared_ptr<Hoge>& _hoges) : hoges{ _hoges } {};

リスト初期化の(5)です。

投稿2019/08/06 14:37

編集2019/08/06 15:41
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

motimotio

2019/08/06 14:55

コメントありがとうございます。 コンストラクタではvectorの1番目の要素として格納し、後から、push_backを使ってshared_ptr<Hoge>を追加したいと考えています。 コードにpush_backの部分を追加します。
SHOMI

2019/08/06 14:57

入れ違いになってしまいましたが、追記しました。
motimotio

2019/08/06 15:03

無事、エラーが消えました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問