【问题标题】:request for member 'compareTo' in charArrayBuffer, which is of non-class type 'char[9]'请求 charArrayBuffer 中的成员 'compareTo',它是非类类型 'char[9]'
【发布时间】:2014-12-29 12:55:33
【问题描述】:

这个想法是创建一个代码来将读取的名称与 serial.read 与预制名称进行比较。

两个声明都是char数组,长度[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]”

【问题讨论】:

    标签: c++ compareto arrays arduino-uno


    【解决方案1】:

    替换

    if (nameBuffer.compareTo(name1) < 0 )
    

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

    因为nameBuffer 不能使用. 运算符访问。

    顺便说一句,根据错误信息,您是用 C++ 编程,而不是用 C。

    【讨论】:

    • 抱歉,我可能找到了包含 c++ 的字符串比较指南,但我正在学习输入语言 c。所以 。运算符是 C++ 中的一个工具??你的回答也很完美,谢谢
    【解决方案2】:

    试试

    strncmp(nameBuffer, name1, sizeof nameBuffer) < 0
    

    而不是

    nameBuffer.compareTo(name1) < 0
    

    您的变量是 char 数组,而不是 classes,因此它们没有方法。

    我使用strncmp 是因为我不能确定nameBuffername1 是否正确地以null 终止,所以这样可以防止一些问题,如果它们不是的话

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

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

    然后附加chars 你可以只是

    nameBuferr += static_cast<char>(inByte);
    

    只做比较

    if (nameBuffer < name1)
    

    【讨论】:

    • 如果我添加参数 sizeof nameBuffer 以便:strncmp(nameBuffer, name1, sizeof nameBuffer)
    • strcmp 只接受两个以'\0' 结尾的字符串,因此您的语法是错误的,请参阅str 之后的n 它是strncmp str{n}cmp。
    • 对不起,我错过了使用协议中的那一行,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多