Problem with String& argument of a function I am trying to send SMSs using a GSM module with Arduino Mega. I have followed a tutorial and downloaded the SIM908IDE100 library. I am using the function

SendSMS(String&amp;, const char [27]);.

It works fine when I type:

sms.SendSMS("1234567890","Text message");

where "1234567890" is the telephone number I want to send the SMS to and "Text message" is the text of the SMS.

If I instead try to pass to the function a String containing the telephone number 

String number = "1234567890";
sms.SendSMS(number,"Text message");

I get the following error:

exit status 1 
no matching function for call to 'SMSGSM::SendSMS(String&amp;, const char [27]);'

I don't understand what String followed by an ampersand means. What am I supposed to pass the function as its first argument?
The function prototype in sms.h is 

char SendSMS(char *number_str, char *message_str);


if number is String, you should have 

sms.SendSMS((char*) number.c_str(),"Text message");


c_str() is a function of the Strinng class. It returns a pointer to internal char array of the String object.

The cast to char* is necessary because the author of the library didn't make the parameter constant with const char*. (It is a good practice, to declare pointers and references as constants.)

The error message no matching function for call to 'SMSGSM::SendSMS(String&amp;, const char [27]); shows the arguments you try to use. String&amp; is reference to some instance of the String type