【问题标题】:How do I call a function in main.cpp from a library I made?如何从我制作的库中调用 main.cpp 中的函数?
【发布时间】:2021-02-23 17:45:24
【问题描述】:

所以我为我的游戏引擎制作了一个小型库(未完成)。我主要包括图书馆 在库中,我有一个“引擎”类,它保存有关窗口、操作系统、设置等的信息。在那个类中,我希望有一段时间(true),在 main.cpp 中我称之为“更新(增量)” 这可能吗?

这是课程:

class Engine {
    Time delta;
    bool run = true;
public:
    Engine(std::function<bool(float)> _update) {
        while (run) {
            run = _update(delta.get_call_time());
        }
    }
};

这就是我在 main 中所说的:

Engine engine(_update);

【问题讨论】:

  • 我们需要更多关于您在做什么的信息,因为您所问问题的直接答案是“与您调用任何其他方法的方式相同。”
  • 仅通过调用该函数不起作用,因为我不在Engine中#include main,只是在main中使用Engine。如何发布文件?
  • 这看起来完全倒退了。通常,main 会创建这样一个对象并在循环中调用它的更新函数,传递它需要的信息。
  • 我编辑了问题,所以里面的代码看起来像有效的 C++

标签: c++ visual-studio class visual-c++


【解决方案1】:

有很多方法可以做到这一点,但我认为最流行的一种是使用std::function 的回调:

class Engine {
    Delta delta = clock();

public:
    Engine(Vector2 window_size, std::function<void(Delta)> update) {
        update(delta)
    }
};

【讨论】:

  • 它给了我“命名空间没有成员函数”
  • @TudorSzabo 您必须包含正确的标准标题。请关注std::function documentation
  • @TudorSzabo 提示:这是functional 标头。
  • 函数“int __cdecl invoke_main(void)”(?invoke_main@@YAHXZ)中引用的未解析外部符号_main。类引擎{时间增量;布尔运行=真;公共:引擎(std::function _update, Vector2 window_size) { while (run) { run = _update(delta.get_call_time()); } } };
  • @TudorSzabo 您在代码的其他地方有问题。针对该问题发布不同的问题。
猜你喜欢
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 2022-07-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多