没有匹配的成员函数调用“push_back”错误

Neu*_*ung 6 c++ vector composition

//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 */
Run Code Online (Sandbox Code Playgroud)

该程序给了我这个错误,我不确定我做错了什么。船舶对象通过名为 add_ship 的方法添加到舰队中,该方法需要一个指向船舶的指针。

No matching member function for call 'push_back'
Run Code Online (Sandbox Code Playgroud)

Mic*_*ler 11

//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; 
} 
Run Code Online (Sandbox Code Playgroud)

错误是因为声明:

std::vector<ship*> ships;
Run Code Online (Sandbox Code Playgroud)

该向量包含指向可变船的指针,但代码将指向 const 船的指针传递给push_back。您要么需要在向量中存储常量指针:

 std::vector<const ship*> ships;
Run Code Online (Sandbox Code Playgroud)

或者将非 const 指针传递给 push_back:

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

旁注:如果您不想收到链接器错误,请将上述函数移至 cpp,将其移至类的主体,或将其声明/定义为内联。