Ostrzeżenie kompilatora (poziom 1) C4930
"prototyp": nie wywoływana funkcja prototypowa (czy definicja zmiennej była przeznaczona?)
Kompilator wykrył prototyp nieużywanej funkcji. Jeśli prototyp był przeznaczony jako deklaracja zmiennej, usuń nawiasy otwarte/zamykane.
Poniższy przykład generuje 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 może również wystąpić, gdy kompilator nie może odróżnić deklaracji prototypu funkcji i wywołania funkcji.
Poniższy przykład generuje 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();
}
W powyższym przykładzie wynik metody, która przyjmuje zero argumentów, jest przekazywany jako argument do konstruktora nienazwanej zmiennej klasy lokalnej. Wywołanie może być uściślane przez nadanie zmiennej lokalnej nazwy zmiennej lokalnej lub prefiksowanie wywołania metody z wystąpieniem obiektu wraz z odpowiednim operatorem wskaźnika do elementu członkowskiego.