【发布时间】:2014-02-18 11:52:17
【问题描述】:
我的班级有 2 个构造函数:
Class()
Class(const std::string &fileName)
我不希望在构造函数的其他位置设置我的文件名。 但构造函数调用取决于运行时:
int main(int ac, char**av)
{
if (ac > 1)
Class test(av[1])
else
Class test;
return (0);
}
此表示法无法编译,原因是“未在范围内定义类”
另一种解决方案是使用类指针:
int main(int ac, char **av)
{
Class *test;
if (ac > 1)
test = new Class(av[1]);
else
test = new Class();
/* Do stuff ...*/
delete test;
return (0);
}
但我不喜欢使用新的。 还有其他方法吗?
提前致谢:)
【问题讨论】:
-
当您想要默认初始化而不是选项时是否传递一个空字符串?
-
使用第二种解决方案有什么问题。如果您将其存储在
std::shared_ptr中,您会没事的 -
我无法复制您的错误。你的第一个代码示例works fine 给我。你如何定义你的班级?
-
@user2079303 是的,这行得通,但是你不能在
if语句之后使用test,因为你实际上有两个不同的变量,都命名为test,每个变量都有一个范围仅限于if的一个分支。
标签: c++ constructor constants