1. ホーム
  2. c++

[解決済み] error : 式は変更可能なL値でなければなりません。

2022-02-08 01:37:33

質問

エラーが発生するのですが。

式は、行で変更可能な lvalue である必要があります。 obj.name = ptr->name

を作ろうとしたことがあります。 オブジェ アン 配列型オブジェクト というように

 for(int j=0 ;j<1;j++)
{
obj[j].id = ptr->id;
obj[j].balance= ptr->balance;
obj[j].name = ptr->name;   //still getting error here.
obj[j].nic = ptr->nic;
}
return(obj);
}

が、これもうまくいきません。

エラーをコメントアウトして、残りの3つの値だけを渡すと、うまくいくはずなのですが、最初のアウトプットの後、ゴミのような値を受け取ってしまいます。

以下は元のコードです。

#include<iostream>
using namespace std;

struct bank
{
  int id, nic;
  float balance;
  char name[20];


};
bank search(bank* );

void main()

{

    bank data[2],mobj;
    for(int i=0;i<2;i++)
    {
    cout<<"enter name: ";
    cin>>data[i].name;
    cout<<"enter id: ";
    cin>>data[i].id;
    cout<<"enter balance : ";
    cin>>data[i].balance;
    cout<<"enter nic : ";
    cin>>data[i].nic;

    }


    mobj=search(data);

    cout <<"balance of customer no. "<<mobj.balance<<endl;
    cout<<"id is" <<mobj.id<<endl;
    cout<< "nic is"<<mobj.nic<<endl;



    system("pause");
}




bank search(bank *ptr)
{   
    int id;
    cout<<"enter value you want to serch"<<endl;
    cin>>id;
    bank obj;
for(int i=0 ; i<2 ;i++)
{
    if(ptr->id == id)
    {
        break;
    }
    ptr++;
}

obj.id = ptr->id;
obj.balance= ptr->balance;
obj.name = ptr->name;    //error in this line(obj must be modifiable value)
obj.nic = ptr->nic;

return(obj);
}

どうぞ、お好きなようにお手伝いください。

解決方法は?

obj.name の配列です。 char . 配列に代入することはできません。ですから、もし配列にこだわりたいのであれば

  1. 見る c++ 配列の複数値への代入
  2. 使用 strcpy(obj.name, ptr->name);

に変換することをお勧めします。 std::string ... 配列よりもはるかに扱いやすく、また、あなたが使う予定の obj.name を文字列として使用します。だから、適切な文字列を手に入れたのです。