2017-02-02 41 views
0

我有一個應該保存其他對象的內存位置的指針數組。將數組添加到list2並從該Object中打印出一個值可以爲我提供正確的值。但試圖從另一個函數打印它給我的是隨機值。C++取消引用通過引用分配給予隨機值的指針

類:

class Airline() { 
Airline(); 
Flight *list2[20]; //array of pointers to Flight 
}; 

class Flight() { 
int flightNo; 
int MaxPeople; 
}; 

添加飛行功能:

currentPos1 =-1  //Global Variable 

void Airline::addFlight(Flight flight) { 
currentPos1++; 
list2[currentPos1] = &flight; 
cout <<(*list2[currentPos1]).flightNo <<"\n"; //Gives proper Value 
} 

ShowAllFlights功能:

void AirDB::showAllFlights() { 
    for (int i = 0; i <= currentPos1; i++) 
    { 
    //Both cout's provide random values; 
     cout <<"\nFlight Number: " <<list2[i]->flightNo; 
     cout <<"\nMaxPeople: " << list2[i]->maxPeople; 
    } 
} 

是我引用和間接引用錯在這裏? 任何幫助將非常讚賞。

+1

註釋//指向指針的指針數組應該讀取指向Flight的指針數組。飛行不是指針。 –

回答

3

的一個問題是在這裏:

list2[currentPos1] = &flight;

這是行不通的,因爲你要指定一個指針到一個臨時Flight。當addFlight函數返回時,該指針不再有效。

你想要做的是通過引用傳遞Flight(最好是const參考):

void Airline::addFlight(const Flight& flight) 

注意,這是在你發送到addFlight參數的壽命預測。對於這個特定的函數,flight將是有效的,但在函數調用之後,您發送的參數也必須在您打算使用存儲在list2中的指針的一生中有效。

取代指向Flight的指針數組,使用std::vector<Flight>將是更簡單的解決方案。

+0

這可能不會解決問題,因爲調用參數可能會在 –

+0

Thankyou之後不久結束。這正是我所錯過的。 – Mish