Посмотрите на следующий фрагмент кода.Ошибка при переходе общего указателя в вектор
#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));
^
Мои знания об указателях ограничен, и я не мог понять ошибку. Пожалуйста, помогите
EDIT
Из ответов, приведенных ниже, и через поиск Google, я в заключение, что вектор указателей является плохой идеей. Но в моем случае только необходимость заставила меня использовать вектор указателей. Я использую C++ для научных вычислений, а объект node содержит переменные, которые мне нужно вычислить. Поскольку количество узлов узла велико, его трудно копировать и перемещать каждый раз. Итак, для передачи функций и инициализации другого объекта класса мне нужно использовать указатель на узел или ссылку.
Если shared_ptr
является неправильным выбором в моем контексте, есть ли другой простой эффективный способ сделать это? Поскольку я новичок в C++, я бы предпочел простое решение.
унарный оператор '' & идет перед операндом – vu1p3n0x
@ vu1p3n0x, Является ли это выше редактировать то, что вы сказали? – user294664
Как вы научились C++? Почему вы (ab) используете макрос, в котором существует псевдоним типа? – StoryTeller