cClass3 cl3;
setClass(&cl3);
проблема с наследованием, error C2243, 'type cast'
IClass1 - абстрактный.
cClass2: public IClass1 - соответственно реализация.
cClass3: public cClass2 - наследуется 2й класс.
В программе, есть функция, в которую передается IClass1. setClass(IClass *cltest). Так вот, когда я вызываю функцию вот таким образом:
Код:
мне выдает ошибку вот такого типа:
Код:
error C2243: 'type cast' : conversion from 'class cClass3 *' to 'class IClass1 *' exists, but is inaccessible
Уже перечитал все на этом форуме и в инете, все говорят, что наследование должно быть не private а public. но исходя из того, что я написал, у меня и так public наследование. Кто-нибудь подскажет в чем я ошибся?
Видимо, что-то ты все же упустил в своем посте.
Возможно, ты где-то в коде все же упустил слово public. Именно в этом случае будет приведенное тобой сообщение об ошибке.
Приведи реальный код.
Код:
class Iuser
{
public:
virtual void setUser (Iuser *pIuser) = 0;
virtual int onUserSetup(char *message) = 0;
}
class cUserImpl: public Iuser
{
public:
cUserImpl();
virtual ~cUserImpl();
protected:
void setUser (Iuser *pIuser);
virtual int onUserSetup(char *message) ;
}
class cUser: public cUserImpl
{
public:
cUser();
virtual ~cUser();
protected:
virtual int onUserSetup(char *message) ;
}
class cConstr
{
public:
cConstr();
~cConstr();
void setUser(IUser *user);
}
*.cpp
int main()
{
cConstr constr;
cUser user;
constr.setuser(&user); // вот сдеся выдает ошибку.
}
{
public:
virtual void setUser (Iuser *pIuser) = 0;
virtual int onUserSetup(char *message) = 0;
}
class cUserImpl: public Iuser
{
public:
cUserImpl();
virtual ~cUserImpl();
protected:
void setUser (Iuser *pIuser);
virtual int onUserSetup(char *message) ;
}
class cUser: public cUserImpl
{
public:
cUser();
virtual ~cUser();
protected:
virtual int onUserSetup(char *message) ;
}
class cConstr
{
public:
cConstr();
~cConstr();
void setUser(IUser *user);
}
*.cpp
int main()
{
cConstr constr;
cUser user;
constr.setuser(&user); // вот сдеся выдает ошибку.
}
сппишная часть нужна?
Цитата: NeO_u
Привожу реальный код:
сппишная часть нужна?
Код:
class Iuser
{
public:
virtual void setUser (Iuser *pIuser) = 0;
virtual int onUserSetup(char *message) = 0;
}
class cUserImpl: public Iuser
{
public:
cUserImpl();
virtual ~cUserImpl();
protected:
void setUser (Iuser *pIuser);
virtual int onUserSetup(char *message) ;
}
class cUser: public cUserImpl
{
public:
cUser();
virtual ~cUser();
protected:
virtual int onUserSetup(char *message) ;
}
class cConstr
{
public:
cConstr();
~cConstr();
void setUser(IUser *user);
}
*.cpp
int main()
{
cConstr constr;
cUser user;
constr.setuser(&user); // вот сдеся выдает ошибку.
}
{
public:
virtual void setUser (Iuser *pIuser) = 0;
virtual int onUserSetup(char *message) = 0;
}
class cUserImpl: public Iuser
{
public:
cUserImpl();
virtual ~cUserImpl();
protected:
void setUser (Iuser *pIuser);
virtual int onUserSetup(char *message) ;
}
class cUser: public cUserImpl
{
public:
cUser();
virtual ~cUser();
protected:
virtual int onUserSetup(char *message) ;
}
class cConstr
{
public:
cConstr();
~cConstr();
void setUser(IUser *user);
}
*.cpp
int main()
{
cConstr constr;
cUser user;
constr.setuser(&user); // вот сдеся выдает ошибку.
}
сппишная часть нужна?
Ну это все же не реальный код, т.к. он вообще не будет компилироваться из-за явных ошибок: нет точек с запятой; в одном месте ты пишешь "User" с большой буквы, а в другом - с маленькой.
Но после устранения данных ошибок все отлично компилируется. Попробуй сам скомпилировать приведенный тобой же пример.