Freigeben über


Compilerfehler C2064

Ausdruck ergibt keine Funktion, die 'Anzahl' Argumente übernimmt

Eine Funktion wird über einen Ausdruck aufgerufen.Der Ausdruck wird nicht als Funktionszeiger ausgewertet.

Im folgenden Beispiel wird C2064 generiert:

// C2064.cpp
int i, j;
char* p;
void func() {
   j = i();    // C2064, i is not a function
   p();        // C2064, p doesn't point to a function
}

Im folgenden Beispiel wird C2064 generiert:

// C2064b.cpp
struct C {
   void func1(){}
   void func2(){}
};
 
typedef void (C::*pFunc)();

int main() {
   C c;
   pFunc funcArray[2] = {&C::func1, &C::func2};
   (funcArray[0])();    // C2064
}

Mögliche Lösung:

// C2064c.cpp
struct C {
   void func1(){}
   void func2(){}
};
 
typedef void (C::*pFunc)();

int main() {
   C c;
   pFunc funcArray[2] = {&C::func1, &C::func2};
   (c.* funcArray[0])();
}

Im folgenden Beispiel wird C2064 generiert:

// C2064d.cpp
struct C {
   typedef void (C::*pFunc)();
   pFunc funcArray[2];
   void func1(){}
   void func2(){}
   C() {
      funcArray[0] = C::func1;
      funcArray[1] = C::func2;
   }
   void func3() {
      (funcArray[0])();   // C2064
   }
};

Mögliche Lösung:

// C2064e.cpp
// compile with: /c
struct C {
   typedef void (C::*pFunc)();
   pFunc funcArray[2];
   void func1(){}
   void func2(){}
   C() {
      funcArray[0] = &C::func1;
      funcArray[1] = &C::func2;
   }
   void func3() {
      (this->* funcArray[0])();
   }
};