小编Ric*_*Kab的帖子

C++引用在函数范围内创建的实例

上下文

问题的背景是我正在编写一个与Arduino一起使用的小型库,以便充当游戏控制器.我遇到的问题与C++有关,而不是Arduino特有的.

我已经在下面包含了库的头文件和源代码,然后是Arduino代码.我尽可能地截断了它.

问题

简而言之,只有我定义的最后一个开关/动作实际上得到了正确的句柄.

这些操作在Arduino设置功能中定义.例如:

controller.addSwitchContinuous(10, 0);  // Pin 10; btn index 0
Run Code Online (Sandbox Code Playgroud)

表示引脚10映射到按钮0.当引脚10关闭时,这被视为按下按钮.这适用于单个操作,但是当我开始添加更多时,只有最后一个操作才有效.因此,在以下示例中,仅识别引脚9:

controller.addSwitchContinuous(10, 0);  // <-- Doesn't work
controller.addSwitchContinuous(9, 1);   // <-- Works
Run Code Online (Sandbox Code Playgroud)

这适用于任意数量的操作:

controller.addSwitchContinuous(10, 0);  // <-- Doesn't work
controller.addSwitchContinuous(9, 1);   // <-- Doesn't work
controller.addSwitchContinuous(8, 2);   // <-- Doesn't work
controller.addSwitchContinuous(7, 3);   // <-- Works
Run Code Online (Sandbox Code Playgroud)

可能的原因

我是C++的新手,所以我怀疑我在使用指针做错了.更具体地说,Joystick_实例如何传递似乎有些不对劲.

我一直在摆弄构造函数并尝试使用引用而不是指针,但我无法让它正常工作.

我可以确认JFSF ::循环中的迭代会迭代所有操作,如果我修改它:

void JFSF::loop()
    {
        for (int n = 0; n < _nextActionIndex; n++)
        {
            if (_actions[n])
            {
                _actions[n]->loop();
                _joystick->setButton(n, PRESSED);  // Debug: Set button …
Run Code Online (Sandbox Code Playgroud)

c++ constructor pointers arduino

3
推荐指数
1
解决办法
79
查看次数

标签 统计

arduino ×1

c++ ×1

constructor ×1

pointers ×1