函数指针清空自身的矢量

Vector of function pointers emptying itself

本文关键字:指针 清空 函数      更新时间:2023-10-16

我正在做一个项目,并开始了一个新的类。我想用一个向量来存储函数的指针,然后调用它们。获取函数指针并调用它不是问题,但存储它们却是问题。我试着把它们存储在一个向量中,但它一直在清空自己。我试着让向量成为一个类的成员和一个外部,但都不起作用。我以前从未遇到过这种问题,也不知道为什么会发生这种情况。这是我当前的代码:

TickHandler.h:

 #include <iostream>
 #include <ctime>
 #include <vector>
 class tickHandler {
 public:
 void addTickingFunction(void(*func)());
 void onTick(void);
 std::vector<void(*)()>funcs;
 };
 extern tickHandler TickHandler;

TickHandler.cpp:

#include "TickHandler.h"
tickHandler TickHandler;
void tickHandler::addTickingFunction(void(*func)())
{
    funcs.push_back(func);
    std::cout << funcs.size() << std::endl;
}
void tickHandler::onTick()
{
    std::cout << funcs.size() << std::endl;
    for (int i = 0; i< funcs.size();i++)
    {
        funcs[i]();
    }
}

预期输出为:

1
1

但它却是:

1
0

如有任何帮助,我们将不胜感激。

编辑:项目中有很多代码,但类只能由两个函数访问:

TickHandler.addTickingFunction(&physicsTick);

TickHandler.onTick();

首先,我建议您在头文件周围设置一些保护措施,例如:

#ifndef TICKHANDLER_H
#define TICKHANDLER_H
    // Class declaration.
#endif

我在这里尝试一下,但我认为你的问题是,你将物理tick函数添加到tick处理程序的一个实例中,但在另一个中运行它们。我不认为他们正在消失。

不知怎么的,您已经得到了TickHandler类的两个实例。如果这是C++,并且是一种面向对象的语言,那么extern TickHandler和在.cpp文件中创建的全局实例会给我敲响警钟