Partager via


Erreur du compilateur C3849

un appel de style fonction sur une expression de type 'type' perdrait les qualificateurs const et/ou volatile pour l’ensemble des number surcharges d’opérateur disponibles

Une variable avec un type const-volatile spécifié peut uniquement appeler des fonctions membres définies avec des qualifications const-volatiles identiques ou supérieures.

Pour corriger cette erreur, fournissez une fonction membre appropriée. Vous ne pouvez pas exécuter une conversion sur un objet qualifié const ou volatile lorsque la conversion entraîne une perte de qualification. Vous pouvez obtenir des qualificateurs, mais vous ne pouvez pas perdre de qualificateurs dans une conversion.

Les exemples suivants génèrent l’erreur C3849 :

// C3849.cpp
void glbFunc3(int i, char c)
{
   i;
}
typedef void (* pFunc3)(int, char);

void glbFunc2(int i)
{
   i;
}

typedef void (* pFunc2)(int);

void glbFunc1()
{
}
typedef void (* pFunc1)();

struct S4
{
   operator ()(int i)
   {
      i;
   }

   operator pFunc1() const
   {
      return &glbFunc1;
   }

   operator pFunc2() volatile
   {
      return &glbFunc2;
   }

   operator pFunc3()
   {
      return &glbFunc3;
   }

   // operator pFunc1() const volatile
   // {
   //    return &glbFunc1;
   // }
};

int main()
{
   // Cannot call any of the 4 overloads of "operator ()(.....)" and
   // "operator pFunc()" because none is declared as "const volatile"
   const volatile S4 s4;  // can only call cv member functions of S4
   s4();   // C3849 to resolve, uncomment member function
}