2013-05-04 35 views
0
class Shape 
    { 
     virtual void out() = 0; 
    }; 

    std::ostream& operator<<(std::ostream& os, Shape& a) 
    { 
     return os << a.out(); 
    } 

我想創建一個抽象基類,並能夠簡單地COUT < <三角/廣場等以後使用,有三角形,正方形由形狀是派生類。運營商<<沒有找到匹配

它工作正常,如果我只是說return os << "test";所以我猜這是與a.out()沒有得到正確調用有關,我似乎無法查明問題。

+0

你打電話給運營商? – juanchopanza 2013-05-04 16:13:13

+0

你應該通過const引用來使用'a'。 – chris 2013-05-04 16:39:56

回答

5

out成員函數返回void,因此它不會返回一個對象供您傳遞給std::ostream::operator<<。也許你想要它返回std::string

+0

哇,我想簡單地從這個操作符調用函數,然後我意識到(如果我是正確的),我必須通過它的東西,並完全忘記原來的功能是無效的。 我不能在操作符<<中傳遞任何東西嗎?或者我應該只是從out函數傳遞一個字符串? – SaintHUN 2013-05-04 16:15:20

+1

@SaintHUN將流作爲參數傳遞給函數,並將其保留爲'void',或者讓函數返回一個字符串。我建議第一個選擇。 – 2013-05-04 16:17:04

+0

非常感謝,併爲這樣一個簡單的問題感到抱歉。 :) – SaintHUN 2013-05-04 16:21:14