Ich habe einen Vektor:Zugang Mitglied eines Iterator eines Vektors von unique_ptr
std::vector<std::unique_ptr<MyAbstract>> myList;
Ich möchte das Element „id“ in einer Schleife für den Zugriff auf und ein bestimmtes Element löschen:
for (auto it = myList.begin(); it != myList.end();)
{
if (it->id == 2)
{
it = myList.erase(it);
break;
}
else
++it;
}
diese Linie ...
if (it->id == 2)
gibt mir eine Fehlermeldung:
'class std::unique_ptr' has no member named 'id'
Dies scheint zu funktionieren:
if (it->get()->id == 2)
Ich frage mich, warum ?! Hier ist der vollständige Code: http://ideone.com/kFohfA
Dank zugreifen, ich wusste, dass es wegen der zugrunde liegenden Typ, aber ich dachte, das -> würde magisch auf den MyAbstract innerhalb von unique_ptr zeigen, so dass ich get() nicht verwenden müsste. – DoubleVoid
@DoubleVoid Wenn das der Fall wäre, könnten Sie nicht einfach auf die Mitglieder von 'std :: unique_ptr' zugreifen. – NathanOliver