Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/48: Рейтинг темы: голосов - 48, средняя оценка - 4.71
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255

Ошибка C2106.

20.09.2011, 23:20. Показов 10297. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, при попытке символьному элементу структуры (char name [30]) присвоить такой же символьный элемент выдается ошибка C2106 - левый операнд должен быть левосторонним значением. Вот фрагмент листинга, на всякий случай с описанием самой структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
..........
struct List {
        int shifr;
        char name [30];
        int kol;
        float stoim;
    };
List MasList [100],min;
..........
..........
min.shifr=MasList[i].shifr;
        min.name=MasList[i].name; //<------ Эта строка.
        min.kol=MasList[i].kol;
        min.stoim=MasList[i].stoim;
Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.09.2011, 23:20
Ответы с готовыми решениями:

Выдает: Ошибка C2296 Ошибка C2106
Ребят помогите, не могу понять, что не так #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; using namespace std; int...

Error C2106 как обойти?
Вот фрагмент кода на Delphi Type matr=array of real; vect=array of real; ... X1:matr; Y1,Z1:vect; ... X1:=alpha;...

Error C2106: '=' : left operand must be l-value
Всем привет. Вот у меня есть такой хедер: #ifndef MATRIXX_H #define MATRIXX_H #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

39
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 23:37
BoBaH26, массивы массивам не присваиваются. Для копирования строк используйте strcpy.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
20.09.2011, 23:38
name - это указатель на строку.
Вы присваиваете указателю указатель, а указатель min.name является константным, т.е. его нельзя изменить.
0
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:39  [ТС]
Сейчас попробую...
0
20.09.2011, 23:40

Не по теме:

Chelioss, это не указатель. Массив чистой воды

Цитата Сообщение от BoBaH26 Посмотреть сообщение
char name [30];

0
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:41  [ТС]
Chelioss, так а как тогда? Через copy, как сказал talis?
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
20.09.2011, 23:41
Цитата Сообщение от talis Посмотреть сообщение

Не по теме:

Chelioss, это не указатель. Массив чистой воды


Не правильно. name - это указатель на массив, причем name - это константный указатель.
0
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:41  [ТС]
Да, кстати, не заметил, это символьный массив.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
20.09.2011, 23:42
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Chelioss, так а как тогда? Через copy, как сказал talis?
Да, либо самому вручную каждый элемент присвоить.
0
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:43  [ТС]
Цитата Сообщение от Chelioss Посмотреть сообщение
Да, либо самому вручную каждый элемент присвоить.
Ну это не есть хорошо, т.к. у меня массив из структур, а мне его надо отсортировать, и для каждого MasList[i].name писать вручную.... Можно с ума сойти..
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 23:44
Chelioss, где он объявлен как указатель?

min - это объект типа List. В struct List есть объявление char name [30];. Соответственно, min.name - массив char из 30 элементов.

Добавлено через 24 секунды
Цитата Сообщение от Chelioss Посмотреть сообщение
Да, либо самому вручную каждый элемент присвоить.
Не имеет смысла. Есть библиотечные функции для копирования строк и памяти.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
20.09.2011, 23:46
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Ну это не есть хорошо, т.к. у меня массив из структур, а мне его надо отсортировать, и для каждого MasList[i].name писать вручную.... Можно с ума сойти..
Можно самому написать функцию подобной strcpy. Ну или используйте strcpy.

Добавлено через 1 минуту
Цитата Сообщение от talis Посмотреть сообщение
Chelioss, где он объявлен как указатель?
min - это объект типа List. В struct List есть объявление char name [30];. Соответственно, min.name - массив char из 30 элементов.
C++
1
2
char *ptr = name; // работает. Почему? Потому, что name - это char *.
strcpy(name1,name2); // Смотрим на прототип функции char * strcpy ( char * destination, const char * source );
Конечно, надо по другому объяснять, а не примеры приводить, но я просто знаю без доказательства)
0
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:48  [ТС]
Не совсем понял с пунктом 1
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 23:50
Цитата Сообщение от Chelioss Посмотреть сообщение
char *ptr = name; // работает. Почему? Потому, что name - это char *.
Работает благодаря приведению типов. Объявление смотрите - char name[30].
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
20.09.2011, 23:50
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Не совсем понял с пунктом 1
Вы про
C++
1
char *ptr = name;
?
name имеет тип const char *, поэтому его можно присвоить другому указателю.
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 23:52
C++
1
char name [30];
Какой тип объявлен?
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
20.09.2011, 23:52
Цитата Сообщение от talis Посмотреть сообщение
Работает благодаря приведению типов. Объявление смотрите - char name[30].
А что такое name? без []? Он по вашему мнению вообще не существует без []. А со [] - это всего лишь i-тый символ, а не массив.
0
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:54  [ТС]
char *ptr = name;
Получается, мы символьному указателю ptr присваиваем адрес первого элемента массива?
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 23:55
Chelioss, по моему мнению (и позвольте мне самому его высказывать), name без [] - это массив из 30-ти char, как и объявлено выше. А к указателю оно приводится автоматически благодаря приведению типов.

Добавлено через 24 секунды
Цитата Сообщение от BoBaH26 Посмотреть сообщение
char *ptr = name;
Получается, мы символьному указателю ptr присваиваем адрес первого элемента массива?
Да. Адрес первого элемента массива name.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
20.09.2011, 23:59
talis
Так мы ни к чему и не придем. Нужно какое-то доказательство.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2011, 23:59
Помогаю со студенческими работами здесь

Error C2106: '=' : left operand must be l-value
Добрый день! Пишу программу управления колледжом. И столкнулась с этой ошибкой. У меня есть класс Department который имеет массив...

error C2106: '=' : left operand must be l-value выдаёт ошибку на сортировку
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale(LC_ALL,...

Функция swap. error C2106: =: левый операнд должен быть левосторонним значением
Выдает ошибки: error C2106: =: левый операнд должен быть левосторонним значением в чем причина? зарание спасибо:) int max; ...

Error C2106 или error C2440
Необходимо создать односвязный список из слов строки.Ошибка в 28 и 35 строке. Код: #include &quot;stdafx.h&quot; #include...

Ошибка компилятора C2106
#include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;locale&gt; void main() { setlocale (LC_ALL , &quot;russian&quot;) ; int n,i; float b,c,h; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru