Teilen über


Compilerfehler C3849

function-style-Aufruf an einen Ausdruck des Typs „type“ verliert möglicherweise die const- und/oder volatile-Qualifizierer für alle number verfügbaren Operatorüberladungen

Bemerkungen

Eine Variable mit einem angegebenen veränderlichen Typ kann nur Memberfunktionen aufrufen, die mit gleichen oder höheren veränderlichen Qualifikationen definiert sind.

Um diesen Fehler zu beheben, stellen Sie eine entsprechende Memberfunktion bereit. Sie können keine Konvertierung für ein konst- oder veränderliches qualifiziertes Objekt ausführen, wenn die Konvertierung zu einem Verlust der Qualifizierung führt. Sie können Qualifizierer gewinnen, aber Sie können qualifizierer in einer Konvertierung nicht verlieren.

Example

Im folgenden Beispiel wird C3849 generiert:

// 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
}