Используйте дочернюю функцию в родительском классе cpp

У меня есть родительский класс и дочерний класс, где родительский класс использует один из дочерних классов в одном из методов родителя. В этом методе родитель использует конструктор и метод (то есть виртуальный метод, унаследованный от родителя) дочернего элемента. Я видел другой вопрос, аналогичный этому, в 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;}

Кажется, я застрял на получении переадресации класса на работу. Если бы кто-то мог сказать мне, как настроить мои включения и классы, это было бы здорово!

0

Решение

foo.h

class Foo {
int x;
Foo(int i);
virtual void funA();
void funB();
}

foo.cpp

#include "Foo.h"#include "Bar.h"
...
void Foo::funB() {
Bar b();
b.funA();
}
...

Bar.h имеет зависимость от Foo.h но вам не нужно какое-либо предварительное объявление классов (например, когда у вас есть строка вроде class Foo; это не определяет тело класса), просто нормальные объявления. Это потому что Foo не используется BarИнтерфейс, только его реализация, поэтому ваш Bar.h файл может остаться без изменений.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]