您好我正在努力做以下事情。
如果从cmd行传递了一些变量,即..
const char * outputtype1
const char * outputtype2
后者可以为NULL。
如果在命令行中设置了outputtype2,那么我想创建一个类的实例。如何让这个类的实例可选。即..
if(outputtype2)
{
cats thomas(outputtype2);
}
然后我会像
一样使用它thomas.eatfood(whiskers);
这就是令人不安的地方。显然,如果outputtype2为null,托马斯不存在,但为什么我不能这样做呢?
if (outputtype2)
{
cats thomas(outputtype2);
}
没有错误 “托马斯”未在此范围内宣布。我担心我在这里错过了一些基本规则。
答案 0 :(得分:5)
你可能想要boost::optional<cats>
。这允许您预先定义thomas
,并且当{并且仅当它可用时'将cats(outputtype2)
分配给托马斯。
结果是,在使用thomas
时,您必须检查它是否实际分配给。{/ p>
答案 1 :(得分:2)
如果我理解你的问题,问题是你在if范围内创建了类的实例。之后你试着调用对象thomas的方法eatfood,但是当前范围内没有对象。
也许你想这样做......
if (outputtype2) {
cats thomas(outputtype1);
thomas.eatfood(whiskers);
}
或使用指针......
Cats* thomas = NULL;
if (outputtype2) {
thomas = new Cats(outputtype1);
}
if (thomas != NULL) {
thomas->eatfood(whiskers);
}
答案 2 :(得分:0)
您错过的是可变范围和可见性的概念。 当你写:
if(outputtype2)
{
cats thomas(outputtype2);
}
这意味着变量thomas
仅存在于声明的块中。在它之外,托马斯不再存在,当控件离开块时,对象和引用都被破坏。所以你不能在外面使用它们!
找另一个编写程序的逻辑。