error : expression must be a modifiable lvalue
Ich erhalte eine Fehlermeldung:
Ausdruck muss ein modifiable lvalue an der Linie,
obj.name = ptr->name
Habe ich versucht obj eine array-Typ-Objekt wie so
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);
}
aber das hat nicht funktioniert entweder.
wenn ich Kommentar die Fehler aus und übergeben Sie einfach die drei restlichen Werte sollte es funktionieren, aber ich erhalte Müll-Werte nach der ersten aus stellen.
hier ist der original code:
#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);
}
bitte helfen, wie Sie sehen, passen!
Sie können nicht Zuordnung auf arrays.
In C++ sollte man (fast) nie verwenden nur C-style arrays. Verwenden
Sie wieder. Nur eine Warnung: man nähert sich eine automatische Frage-Verbot-wegen dieser Abfolge von geringer Qualität "help me plz" Fragen.
Ist es nicht eigentlich egal, ob es der erste Tag oder dem letzten. Oder Ihr 4000er. Sie sollten Lesen Sie die Hilfe-Zentrum und die bestehenden Fragen, um herauszufinden, was Beiträge hier aussieht. Dass Sie noch nicht hier gewesen, sehr lange, ist nicht viel von einer Entschuldigung. Was "forum"?
Diese Frage ist viel besser als Ihre vorherigen, aber! Mein Anliegen ist es, dass die Buchung so viele Fragen in schneller Folge stark impliziert, dass Sie nicht genug Mittel Ihrer eigenen - Zeit auf Ihre Probleme. Es scheint durch das fehlen von Forschungsarbeiten, auch.
In C++ sollte man (fast) nie verwenden nur C-style arrays. Verwenden
std::vector
oder std::array
je nachdem, ob Sie möchten, dass die dynamische oder statische Größe, oder natürlich std::string
wenn Sie sind den Umgang mit strings.Sie wieder. Nur eine Warnung: man nähert sich eine automatische Frage-Verbot-wegen dieser Abfolge von geringer Qualität "help me plz" Fragen.
Ist es nicht eigentlich egal, ob es der erste Tag oder dem letzten. Oder Ihr 4000er. Sie sollten Lesen Sie die Hilfe-Zentrum und die bestehenden Fragen, um herauszufinden, was Beiträge hier aussieht. Dass Sie noch nicht hier gewesen, sehr lange, ist nicht viel von einer Entschuldigung. Was "forum"?
Diese Frage ist viel besser als Ihre vorherigen, aber! Mein Anliegen ist es, dass die Buchung so viele Fragen in schneller Folge stark impliziert, dass Sie nicht genug Mittel Ihrer eigenen - Zeit auf Ihre Probleme. Es scheint durch das fehlen von Forschungsarbeiten, auch.
InformationsquelleAutor Mustafa Mujahid | 2014-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
obj.name
ist ein array vonchar
. Sie können nicht tun, Zuweisungen an arrays. Wenn Sie So wollen, zu bleiben, um zu arrays:strcpy(obj.name, ptr->name);
aber ich würde empfehlen, zu konvertieren, zu
std::string
... es ist viel einfacher zu arbeiten als mit arrays, und es scheint mir, die Sie verwenden möchtenobj.name
als string. So bekam mit den richtigen Saiten.InformationsquelleAutor Ferenc Deak
Ihre Optionen sind:
name
alsstd::string
. Dann wird es funktionierenstrcpy( obj.name, ptr->name );
Wenn Ihr code ist in C++, dann der erste hat noch mehr Vorteile, wenn Sie es Lesen, in mit
cin
es wird automatisch sichergestellt, dass der Puffer ist groß genug für das, was der Benutzer eingibt.Geben Sie einen Namen von 20 oder mehr Zeichen jetzt, und sehen, was passiert. Sie haben Undefiniertes Verhalten und Ihr Programm Abstürzen.
Diese sind die Korrekturen sowieso.
Den Grund, warum dein code nicht funktioniert ist, dass ein array ist nicht übertragbar. Es ist nicht eine
l-value
. Es ist der start in einen festen array von bytes. Ich weiß, es ist verwirrend, weil Sie verwenden können=
initialisieren Sie es so können Sie tun:aber Sie nicht tun können:
Mit
std::string
es funktioniert wiestring
ist eine Klasse, in der standard-Bibliothek. (Eigentlich ist die Klassebasic_string< char, char_traits<char>, allocator<char> >
aber davon ausgehen, es ist eine Klasse für jetzt). Und es verfügt über Methoden, die wissen, wie Sie ihm zuweisen, stream in es, etc. und verwalten den Speicher richtig.Das einzige mal, das array in Ihrem
struct
ist mehr nützlich ist, wenn Sie wollen, speichern Sie Sie auf Festplatte oder schicken Sie Sie über eine Verbindung, wo Sie Sie brauchen, die "roh" - Daten, oder wo Sie wollen, um eine Schnittstelle mit "C" oder einer Scriptsprache, mit derC
Strukturen.InformationsquelleAutor CashCow
obj[j].name ist ein array. Sie können nicht kopieren Sie ein array, dass wie.
InformationsquelleAutor lkanab
obj.name
ist ein array vonchar
. Sie können nicht tun, Zuweisungen an arrays. Wenn Sie So wollen, zu bleiben, um zu arrays:strcpy(obj.name, ptr->name);
aber ich würde empfehlen, zu konvertieren, zu
std::string
... es ist viel einfacher zu arbeiten als mit arrays, und es scheint mir, die Sie verwenden möchtenobj.name
als string. So bekam mit den richtigen Saiten.Ihre Optionen sind:
name
alsstd::string
. Dann wird es funktionierenstrcpy( obj.name, ptr->name );
Wenn Ihr code ist in C++, dann der erste hat noch mehr Vorteile, wenn Sie es Lesen, in mit
cin
es wird automatisch sichergestellt, dass der Puffer ist groß genug für das, was der Benutzer eingibt.Geben Sie einen Namen von 20 oder mehr Zeichen jetzt, und sehen, was passiert. Sie haben Undefiniertes Verhalten und Ihr Programm Abstürzen.
Diese sind die Korrekturen sowieso.
Den Grund, warum dein code nicht funktioniert ist, dass ein array ist nicht übertragbar. Es ist nicht eine
l-value
. Es ist der start in einen festen array von bytes. Ich weiß, es ist verwirrend, weil Sie verwenden können=
initialisieren Sie es so können Sie tun:aber Sie nicht tun können:
Mit
std::string
es funktioniert wiestring
ist eine Klasse, in der standard-Bibliothek. (Eigentlich ist die Klassebasic_string< char, char_traits<char>, allocator<char> >
aber davon ausgehen, es ist eine Klasse für jetzt). Und es verfügt über Methoden, die wissen, wie Sie ihm zuweisen, stream in es, etc. und verwalten den Speicher richtig.Das einzige mal, das array in Ihrem
struct
ist mehr nützlich ist, wenn Sie wollen, speichern Sie Sie auf Festplatte oder schicken Sie Sie über eine Verbindung, wo Sie Sie brauchen, die "roh" - Daten, oder wo Sie wollen, um eine Schnittstelle mit "C" oder einer Scriptsprache, mit derC
Strukturen.obj[j].name ist ein array. Sie können nicht kopieren Sie ein array, dass wie.