Постарайтесь не предупреждать 'Не имеющий ссылки Формальный параметр'

У меня есть суперкласс как это:

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

Как практика, мы раньше рассматривали предупреждения как ошибки. Как избежать вышеупомянутого предупреждения?

Спасибо.

47
задан bdhar 11 June 2010 в 06:19
поделиться

3 ответа

В C++ не обязательно давать имя параметру, который вы не используете, поэтому можно поступить так:

void Child::Function(int)
{
    //Do nothing
}

Однако вы можете пожелать сохранить имя параметра в объявлении в заголовочном файле в качестве документации. Пустой оператор (;) также не нужен.

88
ответ дан 26 November 2019 в 19:14
поделиться

Другой метод, который вы можете использовать, если хотите сохранить имя параметра, - это преобразование в void:

void Child::Function(int param)
{
    (void)param;   //Do nothing
}
19
ответ дан 26 November 2019 в 19:14
поделиться

Как упоминал @Charles Bailey, вы можете пропустить имя параметра.

Однако в определенных сценариях вам понадобится имя параметра, поскольку в отладочных сборках вы вызываете для него ASSERT () , а в розничных сборках это nop . Для этих сценариев есть удобные макросы (по крайней мере, в VC ++ :-)) UNREFERENCED_PARAMETER () , который определяется следующим образом:

#define UNREFERENCED_PARAMETER(x) x

Обратите внимание, что простое приведение @R Samuel Klatchko также работает, но я лично считаю, что это более читабельно, если в коде явно указано, что это параметр, на который нет ссылок, по сравнению с простым необъяснимым приведением, подобным этому.

8
ответ дан 26 November 2019 в 19:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: