Объявление C++ [Error] символа 'char' затеняет параметр. что это означает?

Я пытаюсь передать 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.

πάντα ῥεῖ 03.09.2018 12:02

Когда вы объявляете str3 как char[], вы «затеняет» параметр str3 (std::string&); str3 теперь относится к чему-то другому, и параметр недоступен.

Biffen 03.09.2018 12:02

Возможно, это самый запутанный код, который я когда-либо читал. Я действительно не понимаю, что он должен делать.

Biffen 03.09.2018 12:09

Обратите внимание, что (помимо отсутствующего #include <string> для определения std::string) код в read_string является допустимым, и его значение хорошо определено. Любой компилятор, который отказывается его компилировать, не соответствует определению языка. Это иногда случается, когда код компилируется с несоответствующей опцией, например «притвориться, что каждое предупреждение, которое, по мнению автора компилятора, может быть полезным, на самом деле является ошибкой».

Pete Becker 03.09.2018 14:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
4
4 279
1

Ответы 1

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

Другие вопросы по теме