Where is "NewTrack" defined?
Where are the functions begin, end defined?
Where are the operators ++ (prefix), != and * defined?
What does the compiler say?
You can create a function that returns all tracks or one track, if you will. You will get less encapsulation, though, and some programmers will come to expect to be able to iterate over tracks because... it's a standard pattern for all things that are iterable (all standard contains supports it).