0

我有这个错误“请求从'bool'转换为非标量类型'ManetAddress'”我只知道它与.H文件有关,但我不知道错误是什么。有人介意帮忙吗?多谢。

Class file:    

bool ManetRoutingBase::omnet_exist_rte(struct in_addr dst)
{
    //ManetAddress add = omnet_exist_rte(dst.s_addr);
    ManetAddress add = omnet_exist_rte(dst);
    if (add.isUnspecified()) return false;
    else if (add.getIPv4() == IPv4Address::ALLONES_ADDRESS) return false;
    else return true;
}


RoutingBase.H file

    virtual ManetAddress omnet_exist_rte(ManetAddress dst);     //FIXME revise return values


    virtual bool omnet_exist_rte (in_addr dst);   //FIXME remove it, use the another version
4

1 回答 1

0

因为在这个声明中:

ManetAddress add = omnet_exist_rte(dst);

在这里,您递归地调用该函数并将布尔结果分配给其他东西。


您有两个函数重载omnet_exist_rte。编译器通过查看您使用的参数知道要调用哪一个。如果您使用struct in_addr它将调用带有struct in_addr参数(并返回bool)的函数。

要调用返回 a 的函数ManetAddress,您必须使用type的参数ManetAddress调用它。

正如您现在所拥有的,由于您使用相同的参数类型,它将递归调用相同的函数(一遍又一遍,导致堆栈溢出)。但是,由于您尝试将bool返回值分配给 aManetAddress编译器会给出错误(因为ManetAddressbool不兼容)。

您必须做的是创建一个 type 的变量ManetAddress,并使用该变量来调用函数:

ManetAddress new_dst;
// TODO: Convert from `struct in_addr` to `ManetAddress`...

ManetAddress add = omnet_exist_rte(new_dst);
于 2013-04-23T02:50:20.143 回答