请求 charArrayBuffer 中的成员 'compareTo',其非类类型为 'char[9]'

request for member 'compareTo' in charArrayBuffer, which is of non-class type 'char[9]'

本文关键字:类型 char charArrayBuffer 成员 请求 compareTo      更新时间:2023-10-16

我们的想法是创建一个代码来比较一个带有预制名称的 serial.read。

两个声明都是字符数组,长度 [9],因此我不明白为什么会出现这个问题。

法典:

char name1[9] = "Jesper";
char nameBuffer[9];
void setup()
{
      Serial.begin(9600);
}
void loop()
{
      int i = 0;
      nameBuffer[0] = 0;
      while(Serial.available() == 0)
        {
          // wait for data to be send
        }
        while(Serial.available() > 0)
        {   
          int inByte = Serial.read();
          delay(50);
          nameBuffer[i] = char(inByte);
          i++;
        }
      Serial.print("Searching for: "); 
      Serial.println(nameBuffer);
     if (nameBuffer.compareTo(name1) < 0 )
     {
       Serial.println("Did you mean to write: "Jesper"");
     }
     else
     {
       Serial.println("Jesper found");
     }  
    }

收到的错误:

错误:请求在"nameBuffer"中请求成员"compareTo",该成员的非类类型为"char[9]"

替换

if (nameBuffer.compareTo(name1) < 0 )

if (strcmp(nameBuffer, name1) != 0 )

因为nameBuffer无法使用.运算符访问。

顺便说一句,根据错误消息,您正在用 C++ 而不是 C 进行编程。

尝试

strncmp(nameBuffer, name1, sizeof nameBuffer) < 0

而不是

nameBuffer.compareTo(name1) < 0

您的变量char数组,这些数组不是 ES class,因此它们没有方法。

我使用 strncmp 是因为我无法确定 nameBuffername1是否正确终止了 null,所以这样您就可以防止一些问题,如果它们不是

由于您使用的是 c++,因此您也可以尝试使用 std::string,因为这样如果您声明,则无需担心字符串的长度

std::string nameBuffer;
std::string name1("Jasper");

然后要附加char,您可以只

nameBuferr += static_cast<char>(inByte);

并做比较只是

if (nameBuffer < name1)