Нет соответствующей функции-члена для вызова ошибки «push_back» - PullRequest
0 голосов
/ 10 октября 2018
//fleet.h 
#include "ship.h"
#include <vector>
#include <iostream>
#ifndef fleet_h
#define fleet_h
using namespace std;

class fleet
{
public:

//Add_ship and remove_ship method
bool add_ship(ship const &s);

private:
vector<ship*> ships;
};

//Add_ship method
bool fleet::add_ship(ship const & s){
    ships.push_back(&s); 
       return true;
}
#endif /* fleet_h */

Программа выдает мне эту ошибку, и я не уверен, что я сделал не так.корабельные объекты добавляются в флот с помощью метода add_ship, который принимает указатель на корабль.

No matching member function for call 'push_back'

1 Ответ

0 голосов
/ 10 октября 2018
//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; 
} 

Ошибка из-за объявления:

std::vector<ship*> ships;

Вектор содержит указатели на изменяемые корабли, но код передает указатель на постоянный корабль на push_back.Вам нужно либо сохранить указатели констант в векторе:

 std::vector<const ship*> ships;

, либо передать неконстантный указатель на push_back:

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

Примечание: переместите указанную выше функцию в cpp,переместите его в тело класса или объявите / определите его как встроенный, если вы не хотите получать ошибки компоновщика.

...