Question

J'écris une classe

struct opera{
  int a,b;
  int op;
  opera(int a1=0,int b1=0,int op1=-1):a(a1),b(b1),op(op1){}
  opera& operator=(opera& tmp){
    a=tmp.a;
    b=tmp.b;
    op=tmp.op;
}

Et je veux attribuer à un élément de tableau comme ceci:

ans[a][b]= opera(t.a,t.b,i);

Pourquoi il ne peut pas compiler avec succès.

Toutefois, cela peut fonctionner:

opera tmp=opera(t.a,t.b,i);
ans[a][b]= tmp;

Bien sûr,la structure de l'opéra n'avez pas besoin d'une affectation explicite de la fonction, et

ans[a][b]= opera(t.a,t.b,i);   

permet de travailler directement.

Était-ce utile?

La solution

Lorsque vous souhaitez attribuer d'un temporaire, vous avez besoin

  opera& operator=(opera const& tmp){

l'autre ligne

opera tmp=opera(t.a,t.b,i);

est une initialisation d'un nouvel objet et non d'une affectation.

Autres conseils

ans[a][b]= opera(t.a,t.b,i);

Pourquoi il ne peut pas compiler avec succès.

Qui appelle opérateur d'affectation, c'est pourquoi il ne peut pas compiler, car l'objet temporaire créé à partir de opera(t.a,t.b,i) ne peut pas être liée à la non-const de référence à l'opérateur d'affectation du paramètre.Tout ce que vous devez faire est ceci:

 opera& operator=(const opera & tmp)
                //^^^^ note this

C'est parce que votre copie ctor/opérateur d'affectation n'est pas la prise de son paramètre par référence const.Sinon, lorsque vous utilisez ans[i][j]=opera(a,b,c); un objet temporaire est créé, et selon la norme C++, vous ne pouvez pas prendre une non-const de référence pour cet objet.Par conséquent, vous devez utiliser opera(const opera& o);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top