Аргументы по умолчанию в конструкторе - C ++ - PullRequest
1 голос
/ 04 февраля 2012

У меня есть класс C ++, в котором у меня есть конструктор, который принимает char*,char*, ostream.Я хочу предоставить значение по умолчанию для ostream (cerr).Это сделано в заголовке или в файле .cpp?

Ответы [ 4 ]

9 голосов
/ 04 февраля 2012

Вам нужно превратить параметр в ссылочный параметр, не пытайтесь скопировать std::cerr.Возможно, вам потребуется указать параметр по умолчанию в заголовочном файле, чтобы он был виден всем клиентам класса.

например,

class MyClass {
public:
    MyClass(char*, char*, std::ostream& = std::cerr);
    // ...
};
1 голос
/ 04 февраля 2012

В заголовочном файле вы объявляете значения по умолчанию.

functionname(char *arg1, char* arg2, ostream &arg3 = cerr);

А затем в файле cpp вы просто ожидаете, что он там будет:НЕ помещайте его в файл .cpp.

1 голос
/ 04 февраля 2012

Аргументы по умолчанию указываются при объявлении функции: в этом случае заголовочный файл.

0 голосов
/ 04 февраля 2012

C ++ использует отдельную компиляцию. Каждый файл cpp компилируется отдельно. Если вы используете значения по умолчанию в cpp, он будет работать нормально, но эти значения по умолчанию будут видны только в файле cpp.

Когда заголовочный файл включается в другие файлы вашего компилятора проекта, он определяет всю необходимую ему информацию из заголовочного файла. Если значения по умолчанию - файл cpp, другие части вашего проекта не могут просматривать файлы cpp, так как они могут быть уже скомпилированы. Таким образом, почти во всех случаях значения по умолчанию должны храниться в заголовочном файле .

Другая проблема: вы не можете поместить значения по умолчанию в файлы cpp и h, так как при компиляции компилятор файла cpp не сможет выбрать, какие значения по умолчанию следует использовать, и у вас будет ошибка компиляции.

Ваше решение (в заголовочном файле):

class MyClass
{
public:
    MyClass(char*, char*, ostream& = cerr);
...
};

В некоторых редких случаях вы можете указать значения по умолчанию в файле cpp, если вы хотите, чтобы только этот файл видел и использовал их, в то время как все остальные части проекта не смогут это сделать. Но это случается очень редко .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...