B::FileType
и A::FileType
- это разные типы.Вам нужно typedef A::FileType FileType
внутри B, чтобы правильно совмещать типы, чтобы они были взаимозаменяемыми.В противном случае B::FileType
- это перечисление, которое структурно совпадает с A::FileType
, но не связано с системой типов.Это ответит на ваш основной вопрос.
Исправление этого по-прежнему не позволит компилировать ваш код, однако, и это не то, на что жалуется ошибка.
objectOfClassA уже создан внутри foo_func.Вызов this->objectOfClassA(filename, type)
является попыткой использования оператора overloaded () для объекта;этот оператор не существует, поэтому код не может быть скомпилирован.Вы можете создать objectOfClassA только через конструктор B, используя нотацию инициализатора, например,
B::B(const std::string& filename, FileType type) : objectOfClassA(filename, type)
{
...
}
Тогда в main вы сделаете это:
B objectOfClassB("file_path", B::TEXT);
Выполните шаги в отладчике, чтобы увидеть поток управления.