1. ホーム
  2. c++

[解決済み] push_back'の呼び出しに対応するメンバ関数がないエラー

2022-03-01 21:29:22

質問

//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 */

shipオブジェクトはadd_shipというメソッドでfleetに追加され、shipへのポインタを受け取ります。

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;

ベクターにはミュータブルなシップへのポインタが含まれていますが、このコードではコンスタントなシップへのポインタを push_back . ベクターに const ポインターを格納する必要があるかどうかです。

 std::vector<const ship*> ships;

または、push_back に const でないポインタを渡す。

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

余談:リンカーエラーを起こしたくなければ、上記の関数をcppに移すか、クラスの本体に移すか、インラインとして宣言/定義してください。