У меня есть суперкласс как это:
class Parent
{
public:
virtual void Function(int param);
};
void Parent::Function(int param)
{
std::cout << param << std::endl;
}
.. и подкласс как это:
class Child : public Parent
{
public:
void Function(int param);
};
void Child::Function(int param)
{
;//Do nothing
}
Когда я компилирую подкласс .cpp файл, я получаю эту ошибку
warning C4100: 'param' : unreferenced formal parameter
Как практика, мы раньше рассматривали предупреждения как ошибки. Как избежать вышеупомянутого предупреждения?
Спасибо.
В C++ не обязательно давать имя параметру, который вы не используете, поэтому можно поступить так:
void Child::Function(int)
{
//Do nothing
}
Однако вы можете пожелать сохранить имя параметра в объявлении в заголовочном файле в качестве документации. Пустой оператор (;
) также не нужен.
Другой метод, который вы можете использовать, если хотите сохранить имя параметра, - это преобразование в void:
void Child::Function(int param)
{
(void)param; //Do nothing
}
Как упоминал @Charles Bailey, вы можете пропустить имя параметра.
Однако в определенных сценариях вам понадобится имя параметра, поскольку в отладочных сборках вы вызываете для него ASSERT ()
, а в розничных сборках это nop
. Для этих сценариев есть удобные макросы (по крайней мере, в VC ++ :-)) UNREFERENCED_PARAMETER ()
, который определяется следующим образом:
#define UNREFERENCED_PARAMETER(x) x
Обратите внимание, что простое приведение @R Samuel Klatchko также работает, но я лично считаю, что это более читабельно, если в коде явно указано, что это параметр, на который нет ссылок, по сравнению с простым необъяснимым приведением, подобным этому.