Avviso del compilatore (livello 1) C4930

'prototype': funzione prototipo non chiamata (è stata prevista una definizione di variabile?)

Il compilatore ha rilevato un prototipo di funzione inutilizzato. Se il prototipo era destinato a una dichiarazione di variabile, rimuovere le parentesi aperte/vicine.

L'esempio seguente genera l'errore C4930:

// 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 può verificarsi anche quando il compilatore non può distinguere tra una dichiarazione di prototipo di funzione e una chiamata di funzione.

L'esempio seguente genera l'errore C4930:

// 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();
}

Nell'esempio precedente il risultato di un metodo che accetta zero argomenti viene passato come argomento al costruttore di una variabile di classe locale senza nome. La chiamata può essere disambiguata assegnando un nome alla variabile locale o anteponendo la chiamata al metodo con un'istanza dell'oggetto insieme all'operatore puntatore a membro appropriato.