You probably want to encapsulate the data like your product catalog in some sort of object. You would then query the object to get some data out of it. If you need the object in another source file, generally you'd write a function or method that accepts the catalog object as a parameter and the caller would need to pass the object in to that method or function. So you might have this in one source file:
class ProductCatalog
{
public:
ProductCatalog();
virtual void ~ProductCatalog();
int getNumItems();
Product* getItemAtIndex(const int index);
// ... whatever else your product catalog needs
};
And then in some other source file, you'd create a product catalog and then pass it to whatever functions or methods need it, like this:
void DoSomeWork ()
{
ProductCatalog catalog;
AddProductsToCatalog (catalog); // <- Here you pass the catalog to someone else to work with
int numProds = catalog.getNumItems();
for (int i = 0; i < numProds; i++)
{
Product* nextItem = catalog.getItemAtIndex(i);
// ... do something with product here ...
}
}