Левый операнд должен быть левосторонним значением

Левый операнд должен быть левосторонним значением

Здравствуйте!
Пытаюсь присвоить одной части массива другую и не получается.
Помогите пожалуйста, сразу скажу, чтоб не осуждали сильно за ошибки, я заочник информацию приходится изучать быстро и в сжатые сроки.

using namespace std;
struct sotrudnic {
    int nom;            //номер сотрудника
    char name [15];     //имя
    char fam [20];      //Фамилия
    char otch [20];     //Отчество
    char dolzh [20];    //Должность
    double dr;          //Год рождения
    double zp;          //Зарплата
};

int main(){
    setlocale (LC_CTYPE, "Russian");
    //setlocale(0, "");
    cout << "8 Лабораторная работа " << endl << "2 Вариант" << endl<<endl;

    int n;              //Количество сотрудников
    cout << "Введите количество сотрудников: ";
    cin >> n;

    //Объявили динамический массив, через вектор, в него запишем наших сотрудников
    //vector<sotrudnic> sotr(n);
    sotrudnic *sotr = new sotrudnic[n];

    for (int i(0);i<n;i++){
        sotr[i].nom = i;
        cout << "Введите имя сотрудника: ";
        cin >> sotr[i].name;
        cout << "Введите фамилию сотрудника: ";
        cin >> sotr[i].fam;
        cout << "Введите отчество сотрудника: ";
        cin >> sotr[i].otch;
        cout << "Введите должность сотрудника: ";
        cin >> sotr[i].dolzh;
        cout << "Введите год рождения сотрудника: ";
        cin >> sotr[i].dr;
        cout << "Введите зарплату сотрудника: ";
        cin >> sotr[i].zp;
        system ("cls");
    };

    ofstream fout;      //создали объект
    fout.open("file.txt");  // открыли файл

    fout << "Номер\t\tИмя\t\tФам\t\tОтч\t\tДолжн\t\tГод\t\tЗарплата\n";//записали в вайл все наши элементы
    for (int i(0);i<n;i++){
        fout << sotr[i].nom <<"\t\t" << sotr[i].name<<"\t\t"<<sotr[i].fam<<"\t\t"<<sotr[i].otch<<"\t\t";
        fout << sotr[i].dolzh<<"\t\t"<<sotr[i].dr<<"\t\t"<<sotr[i].zp<<"\t\t"<<endl;
    };

    char fam1[20];
    cout << "Щас будем удалять элемент с указанной фамилией" << endl;
    cout << "Введите фамилию"<<endl;
    cin >> fam1;
    int nf=n,j,i;
    j=0;
    for (i=0;i<n;i++){
        if(sotr[i].fam==fam1){
            for(j=i;j<n-1;j++){
                sotr[j].nom = sotr[j+1].nom;
                sotr[j].name = sotr[j+1].name;  // вот тут ругается
                sotr[j].fam = sotr[j+1].fam;    // и тут
            };
        };
    }
    system ("pause");
    return 0;}

ругается на две строчки:

sotr[j].name = sotr[j+1].name;
sotr[j].fam = sotr[j+1].fam;

В struct sotrudnic поля name, fam, otch, dolzh являются константными указателями (они описаны как массивы символов). Переприсваивать такие указатели нельзя. Если нужно перенести информацию из одного символьного массива (С-строки) в другой, используй strncpy() из cstring.

Кстати, в конце программы ты не освобождаешь память от динамического массива sotr.

Понял ошибку.
Я изменил значения char на string и ошибку пропала.
На счет освобождения памяти тоже учту.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.