запрос на член ‘CompareTo’ в charArrayBuffer, который имеет неклассовый тип ‘char [9]’

Идея состояла в том, чтобы создать код для сравнения прочитанного имени с 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");
}
}

Ошибка получена:

ошибка: запрос на член ‘CompareTo’ в ‘nameBuffer’, который имеет неклассовый тип ‘char [9]’

0

Решение

замещать

if (nameBuffer.compareTo(name1) < 0 )

с

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

как nameBuffer не могут быть доступны с . оператор.

Кстати, согласно сообщению об ошибке, вы программируете на C ++, а не на C.

0

Другие решения

Пытаться

strncmp(nameBuffer, name1, sizeof nameBuffer) < 0

вместо

nameBuffer.compareTo(name1) < 0

ваши переменные char Массивы не являются classУ них нет методов.

я использую strncmp потому что я не могу быть уверен, что nameBuffer а также name1 правильно обнуляются, поэтому таким образом вы можете избежать некоторых проблем, если они не были

Поскольку вы используете c ++, вы также можете попробовать использовать std::string вместо этого, так как вам не нужно беспокоиться о длине строк, если вы объявите

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

затем добавить charты можешь просто

nameBuferr += static_cast<char>(inByte);

и сделать сравнение просто

if (nameBuffer < name1)
0

По вопросам рекламы [email protected]