gpt4 book ai didi

c++ - 清空自身的函数指针 vector

转载 作者:行者123 更新时间:2023-11-28 07:31:19 26 4
gpt4 key购买 nike

我正在做一个项目并开始了一个新类(class)。我想用一个 vector 来存储函数的指针,然后调用它们。获取函数指针并调用它不是问题,但是存储它们是问题。我尝试将它们存储在一个 vector 中,但它一直在清空自己。我试过使 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();

最佳答案

首先,我建议您对该头文件采取一些保护措施,例如:

#ifndef TICKHANDLER_H
#define TICKHANDLER_H

// Class declaration.

#endif

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

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

关于c++ - 清空自身的函数指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17618972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com