Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.81
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
#1

Ошибка C2106. - C++

20.09.2011, 23:20. Просмотров 4231. Ответов 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;
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2011, 23:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка C2106. (C++):

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

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

Error C2106 как обойти? - C++
Вот фрагмент кода на 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 - C++
Добрый день! Пишу программу управления колледжом. И столкнулась с этой ошибкой. У меня есть класс Department который имеет массив...

error C2106: '=' : left operand must be l-value выдаёт ошибку на сортировку - C++
#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: =: левый операнд должен быть левосторонним значением - C++
Выдает ошибки: error C2106: =: левый операнд должен быть левосторонним значением в чем причина? зарание спасибо:) int max; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 23:37 #2
BoBaH26, массивы массивам не присваиваются. Для копирования строк используйте strcpy.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
20.09.2011, 23:38 #3
name - это указатель на строку.
Вы присваиваете указателю указатель, а указатель min.name является константным, т.е. его нельзя изменить.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:39  [ТС] #4
Сейчас попробую...
talis
20.09.2011, 23:40
  #5

Не по теме:

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

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

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

Не по теме:

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


Не правильно. name - это указатель на массив, причем name - это константный указатель.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:41  [ТС] #8
Да, кстати, не заметил, это символьный массив.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
20.09.2011, 23:42 #9
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Chelioss, так а как тогда? Через copy, как сказал talis?
Да, либо самому вручную каждый элемент присвоить.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:43  [ТС] #10
Цитата Сообщение от Chelioss Посмотреть сообщение
Да, либо самому вручную каждый элемент присвоить.
Ну это не есть хорошо, т.к. у меня массив из структур, а мне его надо отсортировать, и для каждого MasList[i].name писать вручную.... Можно с ума сойти..
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 23:44 #11
Chelioss, где он объявлен как указатель?

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

Добавлено через 24 секунды
Цитата Сообщение от Chelioss Посмотреть сообщение
Да, либо самому вручную каждый элемент присвоить.
Не имеет смысла. Есть библиотечные функции для копирования строк и памяти.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
20.09.2011, 23:46 #12
Цитата Сообщение от 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 );
Конечно, надо по другому объяснять, а не примеры приводить, но я просто знаю без доказательства)
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
20.09.2011, 23:48  [ТС] #13
Не совсем понял с пунктом 1
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 23:50 #14
Цитата Сообщение от Chelioss Посмотреть сообщение
char *ptr = name; // работает. Почему? Потому, что name - это char *.
Работает благодаря приведению типов. Объявление смотрите - char name[30].
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
20.09.2011, 23:50 #15
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Не совсем понял с пунктом 1
Вы про
C++
1
char *ptr = name;
?
name имеет тип const char *, поэтому его можно присвоить другому указателю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2011, 23:50
Привет! Вот еще темы с ответами:

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

Ошибка компилятора C2106 - C (СИ)
#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; ...

IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services - C# ASP.NET
Привет! Конфигурация win2000pro sp2, стандартный IIS, IE 5. При попытке обратиться к сценарию(asp) получаю ошибку: &lt;пропуск&gt; ......

1C 8.x Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка записи! - 1С
Доброго всем времени суток! подскажи пожалуйста как исправить ошибку: Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.09.2011, 23:50
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru