недопустимое использование неполного типа 'имя класса класса' c ++ - PullRequest
0 голосов
/ 01 марта 2019

One.h

#pragma once
class Three;

class One
{
    public:
      std::string name;
      One(std::string newName);
      virtual void Myfunction(Three *three) = 0;
}

One.cpp

#include "One.h"

One::One(std::string newName)
{
      name = newName;
}

Two.h

#pragma once
#include "One.h"

class Two : public One
{
   public:
        Two(std::string newName);
        void Myfunction(Three * three);
}

Two.cpp

#include "Two.h"

Two::Two(std::string newName)
        :One(newName)
{};

void Two::Myfunction(Three *three)
{
    std::cout << three->newnum << std::endl;
}

Three.h

 #pragma once
 #include "One.h"

 class Three
 {
     public:
          One *one;
          int num;
          Three(One *newone, int newnum);
 }

Three.cpp

 #include "Three.h"

 Three(One *newone, int newnum)
     :one(newone),
      num(newnum)
 {     
 }

Итак, у меня есть три класса One, который является родительским для Two, и Two переопределяет чисто виртуальную функцию.Три содержит указатель на один объект, который я хочу указать на три в двух, чтобы я мог использовать полиморфизм, когда делаю больше классов, наследуемых от одного, чтобы сделать указатели One равными новым объектам, которые являются потомками объекта One, и сделать для всех этих объектов print num.из трех указателей.Когда я компилирую, я получаю

ошибку: недопустимое использование неполного типа 'класс Три' std :: cout << three-> num << std :: endl; </p>

Я знаю, что у меня круговая зависимость, я просто застрял в том, как ее исправить.

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