Проблема со строкой и аргументом функции
Я пытаюсь отправить SMS с помощью модуля GSM с Arduino Mega. Я выполнил руководство и загрузил библиотеку SIM908IDE100. Я использую функцию
SendSMS(String&, const char [27]);
.
sms.SendSMS("1234567890","Текстовое сообщение");
где «1234567890» — это номер телефона, на который я хочу отправить SMS, а «Текстовое сообщение» — это текст SMS.
Если вместо этого я попытаюсь передать функции строку, содержащую номер телефона
Номер строки = "1234567890";
sms.SendSMS(номер, «Текстовое сообщение»);
Я получаю следующую ошибку:
статус выхода 1
нет функции сопоставления для вызова 'SMSGSM::SendSMS(String&, const char [27]);'
Я не понимаю, что означает строка, за которой следует амперсанд. Что я должен передать функции в качестве первого аргумента?
@arderino, 👍0
Обсуждение1 ответ
Лучший ответ:
Прототип функции в sms.h это
char SendSMS(char *number_str, char *message_str);
если number
— это String
, у вас должно быть
sms.SendSMS((char*) number.c_str(),"Text message");
c_str()
— это функция класса Stringng. Он возвращает указатель на внутренний массив символов объекта String.
Приведение к char*
необходимо, поскольку автор библиотеки не сделал параметр константой с помощью const char*
. (Хорошей практикой является объявление указателей и ссылок как констант.)
В сообщении об ошибке нет соответствующей функции для вызова 'SMSGSM::SendSMS(String&, const char [27]);
показаны аргументы, которые вы пытаетесь использовать. String&
— это ссылка на некоторый экземпляр типа String
если я использую sms.SendSMS(number.c_str(),"Text message");
я получаю ошибку: нет соответствующей функции для вызова 'SendSMS(const char*, const char [13])'
, @arderino
sms.SendSMS((char*) number.c_str(),"Текстовое сообщение");
, @Juraj
большое спасибо, теперь работает. Я до сих пор не до конца понимаю, как работает (char*)
, не могли бы вы вкратце это объяснить? еще раз спасибо, @arderino
https://www.tutorialspoint.com/cprogramming/c_strings.htm, @Juraj
- Как разделить входящую строку?
- Моделирование Arduino Mega 2560 с GSM модулем с использованием Proteus
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Arduino GSM Shield GSM_READY никогда не готов
- Arduino Mega + SIM808 GSM + модуль GPS + программа включается без нажатия кнопки?
- Как извлечь широту и долготу из GPS
- Arduino Serial.ReadString() проблема
- Можно ли изменить официальную библиотеку шилдов arduino GSM для работы с аппаратным serial на mega?
вы уверены, что это не
sms.SendSMS("1234567890","Текстовое сообщение");
, дающее вам "нет соответствующей функции"?, @Juraj@Юрай Да, я уверен.
sms.SendSMS("1234567890","Текстовое сообщение");
работает нормально, и SMS отправляется без проблем., @arderinoПодсказка: попробуйте
sms.SendSMS(String("1234567890"),"Text message");
, @Mikael Patel