2015-11-18 9 views
0

Я работаю над созданием интерфейса для своих алгоритмов.Вложенный абстрактный класс и возвращающий абстрактный класс

У меня есть один базовый абстрактный класс и два производных класса. Внутри абстрактного класса базы он имеет второй абстрактный класс. В базовых производных классах каждый имеет второй производный класс.

структура будет выглядеть следующим образом:

class Engine { 
public: 
    class EngineStatus { 
    // abstract class 
    ... 
    }; 
    Engine(){}; 
    virtual ~Engine(); 
    virtual std::vector<EngineStatus*> getStatus() = 0; 
private: 
    std::vector<EngineStatus> m_status; 
}; 

// Derived class 
class OneEngine : public Engine { 
    public OneEngineStatus : public EngineStatus { 
    // Derived class 
    ... 
    }; 
    ... 

    std::vector<EngineStatus*> getStatus() 
    { 
    return m_status; // Compiler error... 
    } 
}; 

// Derived class 
class AnotherEngine : public Engine { 
    public AnotherEngineStatus : public EngineStatus { 
    // Derived class 
    ... 
    }; 
    ... 

    std::vector<EngineStatus*> getStatus() 
    { 
    return m_status; // Compiler error... 
    } 
}; 

В главном,

Engine* myEngine; 
std::vector<Engine::EngineStatus*> status = myEngine->getStatus(); 

Как я могу сделать это, или есть ли лучший способ сделать это?

ответ

0

Я вижу вашу проблему, член m_status имеет тип std::vector<EngineStatus>, но ваша подпись метода возвращает тип std::vector<EngineStatus*>. Таким образом, вам нужно будет изменить m_status на тип std::vector<EngineStatus*>, а затем удерживать его в указателях.

+0

Нет, это не сработало ... – Moved

+0

Вы пытаетесь исправить ошибку компилятора? Если да, можете ли вы вставить ошибку, которую вы получаете ?. – kcraigie

+0

Ничего, я вижу твою проблему. Я обновил свой ответ. – kcraigie

Смежные вопросы