我有一个C ++类,其中我有一个带char*,char*, ostream
的构造函数。我想为ostream
(cerr
)提供默认值。这是在标题或.cpp
文件中完成的吗?
答案 0 :(得分:9)
您需要将参数设置为参考参数,不应尝试复制std::cerr
。您可能需要在头文件中指定默认参数,以便它对该类的所有客户端可见。
e.g。
class MyClass {
public:
MyClass(char*, char*, std::ostream& = std::cerr);
// ...
};
答案 1 :(得分:1)
声明函数时指定了默认参数:在这种情况下为头文件。
答案 2 :(得分:1)
头文件是声明默认值的地方。
functionname(char *arg1, char* arg2, ostream &arg3 = cerr);
然后在cpp文件中你只是希望它在那里:
functionname(char *arg1, char* arg2, ostream &arg3) {
}
IE,请勿将其放在.cpp文件中。
答案 3 :(得分:0)
C ++使用单独的编译。每个cpp文件都是单独编译的。如果您在cpp中使用默认值,它将正常工作,但只能在cpp文件中看到此默认值。
当项目编译器的其他文件中包含头文件时,从头文件中确定所需的所有信息。如果默认值是cpp文件,则项目的其他部分无法查看cpp文件,因为它们可能已经编译过。因此,几乎在所有情况下,默认值都应保存在头文件中。
另一个问题是你不能在cpp和h文件中都放置默认值,因为编译cpp文件编译器时将无法选择应该使用哪些默认值,并且你将遇到编译错误。
你的解决方案是(在头文件中):
class MyClass
{
public:
MyClass(char*, char*, ostream& = cerr);
...
};
在极少数情况下,您可以在cpp文件中指定默认值,如果您只想查看和使用它们,而项目的所有其他部分都无法执行此操作。但这很少发生。