When you drive a class, you can't do this:
protected class A
{
protected int I;
}
public class B
{
public A a = new A();
}
Because you are effectively "upgrading" the entire protected class to become public - since the entire A class is now available via the B class instance, the code that uses B also need to be able to access the full class A definition, and the
protected
status of A means that isn't possible outside the class and it's derived instances.
Probably, your CrystalReportViewer1 is declared as public or similar.