Предопределить производный класс - PullRequest
1 голос
/ 28 апреля 2011

Я пытаюсь заранее определить производный класс следующим образом,

class Base{

}

class Derived;

class Unreleated{
   Base* ptr;
public:
  Unreleated& operator, (const Unreleated& m){
    static_cast<Derived*>(ptr); // pointer is a derived.

    return *this;
  }


}

class Derived : public Base{
 //this is a container holding a bunch of unrelated.
}

, но получаю недопустимое статическое приведение из Base * в Derived *?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2011

Переместить определение Unreleated::operator, на после определения Derived.

class Base{

};

class Derived;

class Unreleated{
   Base* ptr;
public:
  Unreleated& operator, (const Unreleated& m);

};

class Derived : public Base{
 //this is a container holding a bunch of unrelated.
};

  Unreleated& Unreleated::operator, (const Unreleated& m){
    static_cast<Derived*>(ptr); // pointer is a derived.

    return *this;
  }
3 голосов
/ 28 апреля 2011

Для того, чтобы static_cast от base-> child или child-> base, отношение должно быть известно компилятору в тот момент, когда выполняется приведение.

Так как он действительно не связан, определите свой класс Unrelated после определения базового и производного классов для правильного установления отношения наследования.

Если Derived фактически содержит группу Unrelated по значению, у вас неразрешимая круговая зависимость. Вам придется переосмыслить свой дизайн, чтобы он работал так, как вы хотите. Без более подробной информации трудно помочь дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...