В языке C/C++ функцию с аргументами по-умолчанию можно описывать двумя способами - с предварительным описанием прототипа, или просто сразу писать реализацию.
Если просто пишется реализация функции (без прототипа), то в случае, если функция использует аргументы по-умолчанию, значения этих аргументов надо писать в заголовке реализации функции. Например:
void draw_pic(char *name, int x, int y, float alpha=1.0)
{
...
}
Видно, что стандартное значение переменной alpha задано в заголовке реализации функции, и равно 1.0.
Если функция или метод описывается через прототип и реализацию, то значения по-умолчанию нужно писать в прототипе, а в реализации значения по-умолчанию указывать ненужно, ибо компилятор выдаст ошибку. Пример:
// Прототип
void draw_pic(char *name, int x, int y, float alpha=1.0);
// Реализация
void draw_pic(char *name, int x, int y, float alpha)
{
...
}