У меня есть родительский класс и дочерний класс, где родительский класс использует один из дочерних классов в одном из методов родителя. В этом методе родитель использует конструктор и метод (то есть виртуальный метод, унаследованный от родителя) дочернего элемента. Я видел другой вопрос, аналогичный этому, в stackoeverflow, но они не использовали методы и конструкторы дочернего элемента (один человек упомянул проблему было проще, потому что они использовали только переменные дочернего класса). Я попробовал некоторую базовую переадресацию класса в родительском (помещая дочерний класс вверху), и это не сработало.
Это установка без каких-либо публичных частных различий, попытка обратиться к требуемым заголовкам:
//foo.h
class Foo{
int x;
Foo(int i);
virtual void funA ();
void funB();
};
//foo.cpp
Foo::Foo(int i) {
x = i;
}
Foo::funA(){cout<<"Foo funA"<<endl;}
Foo::funB(){
Bar b = Bar();
b.funA();
}
//bar.h
class Bar : public Foo {
Bar(int i);
virtual void funA ();
};
//bar.cpp
Bar::Bar(int i) { x = i };
void Bar::funA(){cout<<"Bar funA"<<endl;}
Кажется, я застрял на получении переадресации класса на работу. Если бы кто-то мог сказать мне, как настроить мои включения и классы, это было бы здорово!
class Foo {
int x;
Foo(int i);
virtual void funA();
void funB();
}
#include "Foo.h"#include "Bar.h"
...
void Foo::funB() {
Bar b();
b.funA();
}
...
Bar.h
имеет зависимость от Foo.h
но вам не нужно какое-либо предварительное объявление классов (например, когда у вас есть строка вроде class Foo;
это не определяет тело класса), просто нормальные объявления. Это потому что Foo
не используется Bar
Интерфейс, только его реализация, поэтому ваш Bar.h
файл может остаться без изменений.
Других решений пока нет …