Your question has percolated for enough time I think, so I'll jump in and make a small contribution. You don't have your semicolons in the right place.
Your code:
Sales_item(string name):m_strName(name){};
void Display(ostream& os) {os << m_strName};
should be:
Sales_item(string name):m_strName(name){}
void Display(ostream& os) {os << m_strName;}
It is not syntactically incorrect to have semicolons after the closing braces, but they are superfluous in a class definition...