0

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

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();
4

1 回答 1

1

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

#ifndef TICKHANDLER_H
#define TICKHANDLER_H

    // Class declaration.

#endif

我在这里在黑暗中拍摄,但我认为您的问题是您正在将物理刻度函数添加到刻度处理程序的一个实例,但在另一个. 我不认为他们正在消失。

你不知何故有两个TickHandler类的实例。鉴于这是 C++ 并且它是一种面向对象的语言,extern TickHandler在您的文件中创建的全局实例.cpp为我敲响了警钟。

于 2013-07-12T16:13:18.790 回答