Я пытаюсь передать char переменной в функции с помощью strcpy. И я получаю следующие ошибки
[Error] declaration of 'char str3 [100]' shadows a parameter
[Error] invalid initialization of non-const reference of type 'std::string& {aka std::basic_string<char>&}' from an rvalue of type 'char*'
[Note] in passing argument 2 of 'void read_string(std::string&, std::string&)'
Вот мой код:
#include <iostream>
#include <string.h>
using namespace std;
void read_string(std::string &to, std :: string &str3)
{
to = "test";
std::cout << &to << std::endl;
char str3[100];
strcpy (str3,"copy successful");
std::cout << str3<<std :: endl;
}
int main()
{
std::string s = "This should be changed.";
char ss[100];
read_string(s,ss);
std::cout << &s << std::endl;
std::cout<<ss<<std::endl;
return 0;
}
Когда вы объявляете str3 как char[], вы «затеняет» параметр str3 (std::string&); str3 теперь относится к чему-то другому, и параметр недоступен.
Возможно, это самый запутанный код, который я когда-либо читал. Я действительно не понимаю, что он должен делать.
Обратите внимание, что (помимо отсутствующего #include <string> для определения std::string) код в read_string является допустимым, и его значение хорошо определено. Любой компилятор, который отказывается его компилировать, не соответствует определению языка. Это иногда случается, когда код компилируется с несоответствующей опцией, например «притвориться, что каждое предупреждение, которое, по мнению автора компилятора, может быть полезным, на самом деле является ошибкой».





Ваш параметр функции std::string &str3 имеет то же имя, что и char str3[100]; внутри вашего тела функции, вам нужно изменить имя одной из ваших переменных.
Вам следует выбрать другое имя для
str3.