请求从'bool'转换为非标量类型'ManetAddress'

时间:2013-04-23 02:47:30

标签: c++

我有这个错误“从'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

1 个答案:

答案 0 :(得分:0)

因为在这句话中:

ManetAddress add = omnet_exist_rte(dst);

这里以递归方式调用函数,并将布尔结果赋值给其他东西。


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

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

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

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

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

ManetAddress add = omnet_exist_rte(new_dst);