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,将其移至类的主体,或将其声明/定义为内联。