Instead of
private:
QList<structOrder> m_Orders;
private:
QList<structOrder> m_Orders;
To copy to clipboard, switch view to plain text mode
use
private:
QList<structOrder>* m_Orders;
private:
QList<structOrder>* m_Orders;
To copy to clipboard, switch view to plain text mode
The are certain key things you need to be aware of with C++.
One very important thing is that when you call return at the end of the function, a COPY of the type you're returning is created to hold the data. This is because any variable declared inside a function is a STACK variable for the scope of that function. So if you declare a non pointer variable then return it, in your case in the call to orders(), you've essentially chained your call to .append(tmpOrder) on a copy of the variable that is lost as soon as the next line is called.
Now by declaring a QList<structOrder>*, at the end of your function you'll be returning a COPY still, but it will be a copy of a POINTER. The actual instantiated QList is on the heap so isn't cleaned up at the end of the function, therefore copied QList*'s data you'll be appending to is valid and won't get lost in transit.
In terms of architecture, you might want to re-consider this kind of thing anyway and use a wrapper function. A sideline of hiding the QList also is that you could schtick with your non pointer version:
void ShoppingCartView::AddOrder(structOrder order)
{
m_Orders.append( order );
}
void ShoppingCartView::AddOrder(structOrder order)
{
m_Orders.append( order );
}
To copy to clipboard, switch view to plain text mode
Bookmarks