我有这个错误“从'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
答案 0 :(得分:0)
因为在这句话中:
ManetAddress add = omnet_exist_rte(dst);
这里以递归方式调用函数,并将布尔结果赋值给其他东西。
您有两个函数omnet_exist_rte
的重载。编译器通过查看您使用的参数来知道要调用哪一个。如果使用struct in_addr
,它将调用带有struct in_addr
参数的函数(并返回bool
)。
要调用返回ManetAddress
的函数,您必须使用ManetAddress
类型的参数调用它。
正如您现在所知,由于您使用相同的参数类型,它将递归地调用相同的函数(一遍又一遍,导致堆栈溢出)。但是,由于您尝试将bool
返回值分配给ManetAddress
,编译器会给出错误(因为ManetAddress
和bool
不兼容)。
你必须做的是创建一个ManetAddress
类型的变量,并使用该变量来调用该函数:
ManetAddress new_dst;
// TODO: Convert from `struct in_addr` to `ManetAddress`...
ManetAddress add = omnet_exist_rte(new_dst);