没有匹配的成员函数来调用'push_back'错误

No matching member function for call to 'push_back' error

本文关键字:push 错误 back 调用 函数 成员      更新时间:2023-10-16
//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 的方法添加到 Fleet,该方法采用指向船舶的指针。

No matching member function for call 'push_back'
//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;

向量包含指向可变船的指针,但代码将指向 const 船的指针传递给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,将其移动到类的主体,或将其声明/定义为内联。