倒空的功能指针向量

时间:2013-07-12 15:53:58

标签: c++ function pointers vector

我正在研究一个项目并开始了一个新课程。我想使用向量来存储函数的指针,然后调用它们。获取函数指针并调用它不是问题,但存储它们是。我尝试将它们存储在一个向量中,但它会自动清空。我试过让矢量成为一个类和一个extern的成员,两者都不起作用。我从来没有遇到过这个问题,我也不知道为什么会这样。这是我目前的代码:

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

非常感谢任何帮助。

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

TickHandler.addTickingFunction(&physicsTick);

TickHandler.onTick();

1 个答案:

答案 0 :(得分:1)

首先,我建议你在那个头文件周围放一些警卫,例如:

#ifndef TICKHANDLER_H
#define TICKHANDLER_H

    // Class declaration.

#endif

我正在黑暗中拍摄,但我认为您的问题是您正在将物理节拍功能添加到节拍处理程序的一个实例中,但是在另一个中运行它们。我不认为他们正在消失。

你以某种方式得到了TickHandler类的两个实例。鉴于这是C ++,它是一种面向对象的语言,extern TickHandler.cpp文件中创建的全局实例正在为我敲响警钟。