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>
Я знаю, что у меня круговая зависимость, я просто застрял в том, как ее исправить.