2017-02-02 42 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