我正在编写排序可视化。我希望它在算法运行时处理事件和更新屏幕。我有一个具有 SortContext 属性的 Controller 类。我希望 SortContext 的排序方法引用控制器,以便它可以使用方法update,isAppRunning但出现错误:
控制器尚未声明
我怎样才能让它工作?
控制器.hpp
class Controller {
private:
SortContext context;
View view;
std::vector<Sortable> data;
bool algorithmRunning = false;
void handleEvents();
public:
Controller();
void update();
bool isAppRunning();
};
Run Code Online (Sandbox Code Playgroud)
排序上下文.hpp
class SortContext {
private:
std::unique_ptr<SortStrategy> strategy;
static const std::vector<std::function<std::unique_ptr<SortStrategy>(void)>> algorithms;
public:
void chooseStrategy(int algorithmId);
void sort(std::vector<Sortable> &data, Controller &controller);
};
Run Code Online (Sandbox Code Playgroud)
Controller在SortContext.hpp 中转发声明类并在 Controller.hpp 中包含SortContext.hpp:
#include "SortContext.hpp"
class Controller {
private:
SortContext context;
View view;
std::vector<Sortable> data;
bool algorithmRunning = false;
void handleEvents();
public:
Controller();
void update();
bool isAppRunning();
};
Run Code Online (Sandbox Code Playgroud)
class Controller;
class SortContext {
private:
std::unique_ptr<SortStrategy> strategy;
static const std::vector<std::function<std::unique_ptr<SortStrategy>(void)>> algorithms;
public:
void chooseStrategy(int algorithmId);
void sort(std::vector<Sortable> &data, Controller &controller);
};
Run Code Online (Sandbox Code Playgroud)
不要在包含Controller.hpp 的地方包含SortContext.hpp,否则会出现重新定义错误:
#include "Controller.hpp"
int main()
{
// use your classes
}
Run Code Online (Sandbox Code Playgroud)
在这里你可以看到一个现场演示