Freigeben über


Compilerwarnung (Ebene 1) C4930

"Prototyp": Prototypfunktion nicht aufgerufen (war eine Variable definition vorgesehen?)

Der Compiler hat einen nicht verwendeten Funktionsprototyp erkannt. Wenn der Prototyp als variable Deklaration vorgesehen war, entfernen Sie die Klammern zum Öffnen/Schließen.

Im folgenden Beispiel wird C4930 generiert:

// C4930.cpp
// compile with: /W1
class Lock {
public:
   int i;
};

void f() {
   Lock theLock();   // C4930
   // try the following line instead
   // Lock theLock;
}

int main() {
}

C4930 kann auch auftreten, wenn der Compiler nicht zwischen einer Funktionsprototypdeklaration und einem Funktionsaufruf unterscheiden kann.

Im folgenden Beispiel wird C4930 generiert:

// C4930b.cpp
// compile with: /EHsc /W1

class BooleanException
{
   bool _result;

public:
   BooleanException(bool result)
      : _result(result)
   {
   }

   bool GetResult() const
   {
      return _result;
   }
};

template<class T = BooleanException>
class IfFailedThrow
{
public:
   IfFailedThrow(bool result)
   {
      if (!result)
      {
         throw T(result);
      }
   }
};

class MyClass
{
public:
   bool MyFunc()
   {
      try
      {
         IfFailedThrow<>(MyMethod()); // C4930

         // try one of the following lines instead
         // IfFailedThrow<> ift(MyMethod());
         // IfFailedThrow<>(this->MyMethod());
         // IfFailedThrow<>((*this).MyMethod());

         return true;
      }
      catch (BooleanException e)
      {
         return e.GetResult();
      }
   }

private:
   bool MyMethod()
   {
      return true;
   }
};

int main()
{
   MyClass myClass;
   myClass.MyFunc();
}

Im obigen Beispiel wird das Ergebnis einer Methode, die null Argumente akzeptiert, als Argument an den Konstruktor einer nicht benannten lokalen Klassenvariable übergeben. Der Aufruf kann mehrdeutig sein, indem entweder die lokale Variable benannt oder der Methodenaufruf mit einer Objektinstanz zusammen mit dem entsprechenden Zeiger-zu-Member-Operator vorangestellt wird.