Проблема со строкой и аргументом функции

Я пытаюсь отправить 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]);'

Я не понимаю, что означает строка, за которой следует амперсанд. Что я должен передать функции в качестве первого аргумента?

, 👍0

Обсуждение

вы уверены, что это не sms.SendSMS("1234567890","Текстовое сообщение");, дающее вам "нет соответствующей функции"?, @Juraj

@Юрай Да, я уверен. sms.SendSMS("1234567890","Текстовое сообщение"); работает нормально, и SMS отправляется без проблем., @arderino

Подсказка: попробуйте sms.SendSMS(String("1234567890"),"Text message");, @Mikael Patel


1 ответ


Лучший ответ:

0

Прототип функции в 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