次のコードスニペットを見てください。共有ポインタがベクトルにプッシュバックされたときのエラー
#typedef std::shared_ptr<node> node_ptr;
std::vector<node_ptr> temp;
for(int i=0; i<4; i++)
{
temp.push_back(&m_nodes.at(n[i]-1)) // Got error in this line
}
m_nodes
は、ノードオブジェクトのベクトルとして定義されます。私はこのコードを評価すると
std::vector<node> m_node;
、私は次のエラーを得た:ポインタについて
error: no matching function for call to 'std::vector<std::shared_ptr<node> >::push_back(__gnu_cxx::__alloc_traits<std::allocator<node> >::value_type*)'
temp.push_back(&m_nodes.at(n[i]-1));
^
私の知識は限られていると私は間違いを見つけ出すことができませんでした。以下およびGoogle検索を通じて与えられた答えから
EDIT
を助けてください、私はポインタのベクトルは悪い考えであるという結論にいますよ。しかし、私の場合は、ポインタのベクトルを使用する必要があっただけです。私は科学的計算にC++を使用しています。ノードオブジェクトには計算に必要な変数が含まれています。ノードオブジェクトの数が多いため、毎回コピーして移動することは困難です。だから、関数と他のクラスのオブジェクトの初期化に渡すために私はノードまたは参照へのポインタを使用する必要があります。
shared_ptr
が私の状況で間違った選択である場合、これを行うための他の簡単で効率的な方法がありますか?私はC++の初心者ですから、私は単純な解決法を好むでしょう。
単項演算子 '&'はvu1p3n0x @オペランド – vu1p3n0x
前に行く、あなたが言及したものを上記の編集ですか? – user294664
C++をどのように学びましたか?なぜあなたは(ab)型エイリアスが順番に並んでいるマクロを使用していますか? – StoryTeller