2013-05-04 54 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