Рефакторинг старого кода, я наткнулся на эту функцию (псевдокод):
int getMessage( char * buffer, int size = 300 );
Ну и дела, посмотрите на этот буфер, ожидающий переполнения. Поэтому я придумал функцию, использующую std :: string, и подумал, что было бы неплохо использовать перегрузку функций:
int getMessage( std::string & buffer );
Пока все хорошо. Но когда я пытаюсь вызвать функцию со строкой:
std::string buffer;
int rc = getMessage( buffer );
Я получаю эту ошибку:
cannot convert 'std::string' to 'char*' for argument '1' to 'int getMessage(char*, int)'
Очевидно, что компилятор (GCC 4.1.2) изо всех сил пытается преобразовать std :: string в char *, чтобы удовлетворить список параметров первой функции (используя значение по умолчанию, чтобы удовлетворить второй параметр), сдается, но не попробуй вторую функцию ...
У меня не возникло бы проблем с решением этой проблемы, но я хотел бы знать, почему это не помогает, и есть ли способ заставить его работать так, как задумано.