2015-11-18 67 views
0

如何從Flight中檢索對象以與主輸入(flightNumber)進行比較?我如何在main中聲明屬性類型?按值向量刪除矢量中的元素

當我編譯時,顯示錯誤消息:invalid conversion of 'int' to '*Flight*'agent1.delete(flightNumber);

class Flight 
{ 
    int FlightNumber 
}; 

class TravelAgent 
{ 
    vector <Flight *> flightList; 
}; 

void Agent::delete(Flight *obj) 
{ 
    vector<Flight*>::iterator ptr; 
    for(ptr=flightList.begin();ptr!=flightList.end();ptr++) 
    { 
     if((*Ptr)==obj) 
     { 
      flightList.erase(ptr); 
      break; 
     } 
    } 
    if ((ptr) == flightList.end()) 
    { 
     cout<<"Flight not found"<<endl; 
    } 
} 

int main 
{ 
     Agent agent1; 
     int flightNumber; 
     cout<<"Enter the number of the flight: "<<flush; 
     in>>flightNumber; 
     agent1.delete(flightNumber); 
} 
+0

哪裏有'fPtr'如果條件之前被聲明的第二個?另外,錯誤在哪一行? – therainmaker

+0

'flightNumber'是一個int,你試圖將它傳遞給''Agent :: delete'方法,它接受一個'Flight *'參數而不是一個int。 –

+0

@MohamadElghawi是的,我知道這一點。那麼,我的問題或任何類似的參考可以有任何可能的解決方案嗎? –

回答

1

可以在飛行類(如果不存在)添加getter

class Flight{ 
int FlightNumber; 

public: 

int getflightNumber(){ return flightNumber;} 
}; 

去如下: -

void Agent::delete(int flightNumber) 
{ 
    vector<Flight*>::iterator ptr; 
    for(ptr=flightList.begin();ptr!=flightList.end();ptr++) 
    { 
     if(((*Ptr)->getflightNumber() == flightNumber) 
     { 
      flightList.erase(ptr); 
      break; 
     } 
    } 
    if ((fPtr) == listFlight.end()) 
    { 
     cout<<"Flight not found"<<endl; 
    } 
} 
+0

我以前做過,但是ptr無法請求成員getFlight ...這是指針類型(也許你打算使用' - >' –

+0

int getflightNumber();應該是公開的。 – NightFurry

+0

我已經聲明瞭它,但仍然顯示相同的結果。 –

0

您最初的錯誤是在你的主要方法。您需要對其進行更改,以免將航班號傳遞給delete方法,而是創建Flight類的實例。

int main() { // you are also missing parenthesis 
     Agent agent1; 
     int flightNumber; 
     cout<<"Enter the number of the flight: "<<flush; // I don't know what flush is but maybe you meant std::endl 
     cin>>flightNumber; 
     Flight flight(flightNumber); 
     agent1.delete(&flight); // delete takes a Flight* not an int 
} 

這要求您的Flight類具有適當的構造函數。

class Flight 
{ 
public: 
    Flight(int flightNumber) 
     : flightNumber_(flightNumber) 
    {} 

private: 
    int flightNumber_; 
}; 

然後在您的delete方法您搜索的具有相同flightNumber_,你想從你的載體中刪除FlightFlight實例載體。這將需要你的Flight類有某種方式返回它的flightNumber_成員變量。

這絕對不是最好的方式來做到這一點,遠不符合現代C++標準,但它應該讓你去。

1

由於這裏的代碼功能不全面,所以很難給你提供很好的建議。

首先,你的錯誤是因爲你調用(似乎是)成員函數,void Agent::delete(Flight *obj),以代替Flight類型int類型的變量。編譯器無法將您的Flight對象解釋爲int,因此會引發錯誤。

其次,你想知道如何從一個對象中檢索屬性。我會建議你看看訪問者mutators

如果你想檢索保存在你的Flight對象中的信息,你應該公開成員函數。

// in your header file 
class Flight 
{ 
private: 
    int flight_number; 

public: 
    // retrieve flight number value 
    int get_flight_number(void) const; 
    // allow to set the flight number value 
    void set_flight_number(int new_flight_number); 
    // some other member functions 
} 

// in your source file 
int Flight::get_flight_number(void) const 
{ 
    return this->flight_number; 
} 

void Flight::set_flight_number(int new_flight_number) 
{ 
    // let's do some verification (do whatever you want) 
    if (new_flight_number > 0) 
    { 
     this->flight_number = new_flight_number; 
    } 
} 

這樣,您就能夠設置和訪問flight_number通過寫作,例如:

void test_function(Flight *f) 
{ 
    if (f->get_flight_number() == 42) 
    { 
     // do some stuff 
    } 
} 

int main() 
{ 
    Flight *my_f = new Flight(); 
    my_f->set_flight_number = 4242; 
    my_test_function(my_f); 
} 

現在,你有足夠的信息來走了。

注:

你大量使用指針。現代C++強烈傾向於而不是!嘗試使用引用或移動操作。您可以參考這個網頁的信息:

這對初學者有點鐵桿雖然。網絡充滿了偉大的文章。關於它