C ++ использует отдельную компиляцию. Каждый файл cpp компилируется отдельно. Если вы используете значения по умолчанию в cpp, он будет работать нормально, но эти значения по умолчанию будут видны только в файле cpp.
Когда заголовочный файл включается в другие файлы вашего компилятора проекта, он определяет всю необходимую ему информацию из заголовочного файла. Если значения по умолчанию - файл cpp, другие части вашего проекта не могут просматривать файлы cpp, так как они могут быть уже скомпилированы. Таким образом, почти во всех случаях значения по умолчанию должны храниться в заголовочном файле .
Другая проблема: вы не можете поместить значения по умолчанию в файлы cpp и h, так как при компиляции компилятор файла cpp не сможет выбрать, какие значения по умолчанию следует использовать, и у вас будет ошибка компиляции.
Ваше решение (в заголовочном файле):
class MyClass
{
public:
MyClass(char*, char*, ostream& = cerr);
...
};
В некоторых редких случаях вы можете указать значения по умолчанию в файле cpp, если вы хотите, чтобы только этот файл видел и использовал их, в то время как все остальные части проекта не смогут это сделать. Но это случается очень редко .