首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:没有运算符"=“与"Servo_Project.cpp”中的这些操作数匹配,第: 15行,第22列

错误:没有运算符"=“与"Servo_Project.cpp”中的这些操作数匹配,第: 15行,第22列
EN

Stack Overflow用户
提问于 2020-05-21 05:21:49
回答 2查看 44关注 0票数 0

所以我试着使用这里的另一篇文章中的代码,看看我是否可以使用它,这是一个旨在利用电位器来移动伺服电机的代码,但当我试图编译它时,上面给出的错误是No operator "=“匹配"Servo_Project.cpp”中的这些操作数。我如何着手修复这个错误?

为了防止我这么说,我试图编译代码的板是NUCLEO-L476RG,我提到的帖子中的板使用了Nucleo L496ZG板和塔Pro Micro Servo 9G。

代码语言:javascript
复制
#include "mbed.h"
#include "Servo.h"

Servo myservo(D6);
AnalogOut MyPot(A0);


int main() {
    float PotReading;
    PotReading = MyPot.read();

    while(1) {
     for(int i=0; i<100; i++) {
            myservo = (i/100);
            wait(0.01);
        }

        }
    }
EN

回答 2

Stack Overflow用户

发布于 2020-05-21 05:30:44

这一行:

代码语言:javascript
复制
myservo = (i/100);

在几个方面都是错误的。首先,在C++中,i/100将始终是零整数除法截断。其次,没有允许将整数值赋给Servo对象的=操作符。YOu需要调用某种Servo方法,可能是write()

代码语言:javascript
复制
myservo.write(SOMETHING);

SOMETHING应该是你想要工作的伺服的位置或速度。有关说明,请参阅Servo class参考。你的代码试图使用从0到1的分数,但这是行不通的- Servo想要一个介于0和180之间的位置/速度。

票数 0
EN

Stack Overflow用户

发布于 2020-05-21 19:53:40

您应该查看Servo.h头文件,以了解实现了哪些成员函数和运算符。

假设您使用的是this,那么它确实有:

代码语言:javascript
复制
Servo& operator= (float percent);

尽管请注意,该参数是float,并且您传递的是int (该参数也在0.0到1.0的范围内-因此不是其名称所暗示的“百分比”-所以要小心,文档和命名都很糟糕)。你应该有:

代码语言:javascript
复制
myservo = i/100.0f;

然而,即使i / 100会为循环中的所有i生成零,这也不能解释错误,因为隐式强制转换应该是可能的-即使显然不需要。您应该查看您正在使用的实际头文件,以查看是否声明了operator= -可能您有错误的文件或不同的版本,或者只是碰巧使用相同名称的完全不同的实现。

我还注意到,如果您查看header,就会发现该函数没有文档标记,Servo& operator= (Servo& rhs);成员也根本没有文档记录-因此自动生成了令人困惑的“写和读函数的简写”。在Servo文档页面上,当所显示的函数只是其中之一时。它可能已从您的版本中删除。

考虑到文档不完整,而且operator=看起来像是事后才想到的,最简单的解决方案是在任何情况下都直接使用read() / write()成员。或者实现您自己的Servo类--在任何情况下,它似乎都只是PwmOut类的一个薄薄的包装器/外观。因为这实际上是mbed的一部分,而不是用户贡献的未知质量的代码,所以你可能有更坚实的基础。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61923144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档