Geen overeenkomende lidfunctie voor oproep naar ‘Push_Back’ -fout

Het programma geeft me deze fout en ik weet niet zeker wat ik fout heb gedaan. Scheepsobjecten worden toegevoegd aan vloot via een methode die Add_ship wordt genoemd, dat een aanwijzer naar een schip neemt.

No matching member function for call 'push_back'

Antwoord 1, Autoriteit 100%

//Add_ship method bool     
fleet::add_ship(ship const & s)
{ 
    ships.push_back(&s); (No matching member function for call to 'push_back') 
    return true; 
} 

De fout is vanwege de verklaring:

std::vector<ship*> ships;

De vector bevat aanwijzingen op mutable schepen, maar de code passeert een aanwijzer naar een const-verzending naar push_back. Je hoeft ook constanten op te slaan in de vector:

std::vector<const ship*> ships;

of geef een niet-const-aanwijzer aan op de push_back:

fleet::add_ship(ship & s)
{ 
    ships.push_back(&s); (No matching member function for call to 'push_back') 
    return true; 
} 

Side-opmerking: Verplaats de bovenstaande functie naar een CPP, verplaats het naar het lichaam van de klas, of declareer / definieer het als inline, als u linkerfouten niet wilt ontvangen.

Other episodes