Unfortunatelly, ispc doesn't work with magled names (all C++ symbols, except those, which are marked with extern C). So all symbols (functions, variables, types) should be C-style symbols. One of implications is that these symbols should have global visibility (in C++ namespace/class and etc is part of mangled name). So you have to have global definitions for exposred symbols/types.
But as you've mentioned, you can do a hack and define these types in some file, which is included inside the class (so the types belong to class) and included in .ispc file. In this case this is your responsibility to make sure that it works as you expect (alignment and structures layout and etc are the same).