Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблема с наследованием, error C2243, 'type cast'

489
14 декабря 2007 года
NeO_u
277 / / 11.10.2006
Собственно говоря проблема, есть три класса,
IClass1 - абстрактный.
cClass2: public IClass1 - соответственно реализация.
cClass3: public cClass2 - наследуется 2й класс.
В программе, есть функция, в которую передается IClass1. setClass(IClass *cltest). Так вот, когда я вызываю функцию вот таким образом:
 
Код:
cClass3 cl3;
setClass(&cl3);

мне выдает ошибку вот такого типа:

 
Код:
error C2243: 'type cast' : conversion from 'class cClass3 *' to 'class IClass1 *' exists, but is inaccessible


Уже перечитал все на этом форуме и в инете, все говорят, что наследование должно быть не private а public. но исходя из того, что я написал, у меня и так public наследование. Кто-нибудь подскажет в чем я ошибся?
3
14 декабря 2007 года
Green
4.8K / / 20.01.2000
При таком раскладе все должно компилироваться.
Видимо, что-то ты все же упустил в своем посте.
Возможно, ты где-то в коде все же упустил слово public. Именно в этом случае будет приведенное тобой сообщение об ошибке.
Приведи реальный код.
489
14 декабря 2007 года
NeO_u
277 / / 11.10.2006
Привожу реальный код:
Код:
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); // вот сдеся выдает ошибку.
}


сппишная часть нужна?
3
14 декабря 2007 года
Green
4.8K / / 20.01.2000
Цитата: 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); // вот сдеся выдает ошибку.
}


сппишная часть нужна?



Ну это все же не реальный код, т.к. он вообще не будет компилироваться из-за явных ошибок: нет точек с запятой; в одном месте ты пишешь "User" с большой буквы, а в другом - с маленькой.

Но после устранения данных ошибок все отлично компилируется. Попробуй сам скомпилировать приведенный тобой же пример.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог