2013-04-23 66 views
0

我有這個錯誤「從'bool'轉換爲非標量類型'ManetAddress'請求」我只知道它與.H文件有關但我不知道錯誤是什麼。任何人的頭腦幫助?非常感謝。從'bool'轉換爲非標量類型'ManetAddress'請求

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

因爲在此聲明:

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); 
+0

對不起IM初學者在C++的例子?非常感謝 – 2013-04-23 02:55:49

+0

@KsoonTan更新了我的答案。 – 2013-04-23 03:02:13

+0

好吧謝謝了很多 – 2013-04-23 03:03:15

相關問題