2017-06-12 85 views
-2

所以我正在学习如何使用BWAPI,并学习C++。在if语句中使用 - >

我的教程以下通过,并具有以下命令:

auto &u : Broodwar->self()->getUnits() 
...  
if (pool && (u->isIdle() && !u->train(UnitTypes::Zerg_Zergling))) 

命令作品教程预期,当满足条件小狗都建立。我的问题是,我如何修改/重新格式化if语句来做构建小狗的工作。

也就是说,我要像psudo代码执行的东西:

if (pool && (u->isIdle() && !u)){ 
    train(UnitTypes::Zerg_Zergling) 
    pointless_counter++; 
    foo--; 
    bar=3*3; 
} 

我可能会混淆这两个“ - >”或操作员,因为我以前的经验是“U”!在上下文中,我认为!u->train(UnitTypes::Zerg_Zergling)转化为:“指向对象u(如果它是假的/不存在?),执行其内部预定义的命令列表,选项Zergling。”

+4

'auto&u:...'这不是标准C++。你是如何编译这个的?您还应该阅读运算符优先级。 – Rakete1111

+7

你应该阅读(好)[C++教程或书](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 C++非常复杂,您无法通过使用库中的tuto来学习它。 – nefas

+2

请参阅运算符优先级表[here](https://stackoverflow.com/q/20767745/509868) – anatolyg

回答

0

所以上面的人帮助了我的自学,我已经尽最大努力提高了他们的评论。我的困惑有两个组成部分。

第一个问题是在'!'之后读取' - >'运算符。 初始命令是:

if (pool && u->isIdle() && !u->train(UnitTypes::Zerg_Zergling)){ foo++;} 

其中u是一个预定义的类的一个实例,并且池是一些布尔变量。与一些澄清括号,它是由C++的算符优先(见上面注释)作为读:

if (pool && u->isIdle() && !(u->train(UnitTypes::Zerg_Zergling))){ foo++;} 

而重写命令,如预期将是:

if (pool && u->isIdle()){ 
    u->train(UnitTypes::Zerg_Zergling); 
    pointless_counter++; 
    foo++; 
    bar=3*3; 
} 

的第二个问题是,该C++ (取决于编译器),在if语句的条件中执行或分配命令是非常令人高兴的,这就是为什么命令看起来令人震惊的空白。这对用户可能熟悉的其他语言并不常见。例如:

if(x=3){ foo++; } 

实际上将值3分配给x,而不是抛出错误。至少,用我正在使用的编译器。该教程给出的命令假设学生熟悉这个功能,通过在条件内向u发送值,具体为:u->train(UnitTypes::Zerg_Zergling)