OneWire *oneWireBus[] = {
new OneWire(7),
new OneWire(8)
};
The problem you were having is that your two objects are temporaries, they only exist in the scope of the initializer list, so taking the address of them doesn't make sense, since said address would be invalid outside of the list. Instead you need to use dynamic allocation (i.e. the "new" operator) which creates the object and returns a pointer to it. This works because the object is never deleted automatically, only by you the programmer using the delete operator, e.g.
delete oneWireBus[0];
Alternatively, you could not use pointers, as below, then you won't need to manage the objects manually, they'll get automatically deleted when the array goes out of scope.