0
votes

C2679 binaire '- =': aucun opérateur trouvé qui prend un opérande de droite de type 'T' (ou il n'y a pas de conversion acceptable)

J'ai créé une classe de vecteur qui contient 3 paramètres et surchargé le - = opérateur xxx

mais quand j'essaie d'utiliser cet opérateur xxx < p> Je reçois l'erreur que j'ai saisi dans le titre.


0 commentaires

3 Réponses :


2
votes

ce est un pointeur et ce [i] ne fait pas ce que vous attendez. Il prend ceci et exécute l'arithmétique du pointeur. La seule valeur de i qui n'est pas UB est alors 0 et le type de cette expression est Static3Vector

C'est à peu près équivalent à ceci:

    T& operator [] (const size_t& i) { return m_coords[i]; }
    const T& operator [] (const size_t& i) const { return m_coords[i]; }

Vous pouvez le résoudre de deux manières:

(*this)[i] -= rhs[i]; //dereference first
this->operator[](i) -= rhs[i]; //call operator explicitly
m_coords[i] -= rhs[i]; //don't use overloaded operator, use data directly

Encore une chose : Les deux premiers ne fonctionneront pas avec votre implémentation actuelle, car votre opérateur [] renvoie une copie de la valeur qu'il stocke. Il est plus courant pour operator [] de renvoyer une référence à un objet stocké:

Static3Vector<int> vec1(1,2,3);
Static3Vector<int>* ptr = &vec1;
ptr[0]; //ok, equivalent to *ptr
ptr[1]; //compiles, but invokes UB

Voir aussi Quelles sont les règles et expressions de base pour la surcharge des opérateurs?


0 commentaires

0
votes

Jetez un coup d'œil à vos opérateurs d'indexation:

T operator [] (const size_t& i) { return m_coords[i]; }
T operator [] (const size_t& i) const { return m_coords[i]; }


0 commentaires

0
votes

Il y a une utilisation incorrecte de l'opérateur de l'indice. Dans les définitions de l'opérateur comme par exemple dans ce xxx

dans cette instruction xxx

il est utilisé l'opérateur Industri intégré intégré pour un Objet du type de pointeur static3vector * .

Vous devez écrire xxx

ou xxx

Le type de retour doit également être un type référencé comme xxx

et xxx


2 commentaires

Est-ce que const Static3Vector & operator - = (const Static3Vector & rhs) const est appelé pour les objets const? pourquoi voudrais-je soustraire d'un objet const?


@SzymonO C'était une faute de frappe. J'ai oublié qu'il s'agit d'un opérateur d'affectation composé. Je pensais que c'était l'opérateur moins. :)