头文件只有在被包含的时候才会被编译,既然你在cpp文件中#include "animal.h"在包含#include "Fish.h"这个头文件不就行了。编译器在编译Fish.h这个头文件的时候就发现animal.h这个头文件已经被编译了。那么在这里肯定是很包含的animal.h,再包含的fish.h。