Interestingly, if I use my Linux machine to flash this code:
Code:
int i = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.print(i);
Serial.println(" yeet");
//delay();
i++;
}
onto another Teensy 3.2 (same model as the one I use in the project), everything works as intended 
Here's how I declare the Serial on my main project:
Code:
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
while (!Serial && millis() < 3000);
//delay(1000);
Serial.println("hello");
aClass.setSerial(&Serial);
aClass uses a pointer to print to this Serial from its functions.
Edit: the different behaviour makes sense, because the second Teensy is powered from USB, whereas the original has its own supply and so doesn't get power cycled...