【发布时间】:2014-12-24 15:29:41
【问题描述】:
我有一个“stampstream”类,它本质上是为了像“cout”一样工作。接下来的两个函数在类之外。这是有效的部分。
class stampstream: public std::ostream
{
//code
stampstream& operator<<(stampstream& (*x)(void))
{
//code
}
//code
};
stampstream& endr()
{
//nocode
}
stampstream& (*endrow)(void)=endr;
主要:
stampstream s;
s << "teststring1" << endrow;
请注意,“endrow”本质上是“endl”。这部分工作得很好,编译并使用正确的输出执行。 现在,我正在尝试用另一个可能的 row(int) 函数重载
class stampstream: public std::ostream
{
//code
stampstream& operator<<(stampstream& (*r)(int y))
{
//code
}
//code
};
stampstream& ro(int y)
{
//nocode
}
stampstream& (*row)(int)=ro;
主要:
s << "teststring2" << row(5);
这是我得到的错误:
error: invalid user-defined conversion from ‘stampstream’ to ‘stampstream& (*)(int)’ [-fpermissive]
我对行做错了什么?
【问题讨论】:
-
提示:
row(5)的类型是什么? -
行是带有int参数的stampstream类型
-
而 当你调用它时,就像你说
row(5)时所做的那样,它会返回什么?stampstream,不是指向函数的指针。 -
它不返回任何东西,但 endrow 也不返回,而且效果很好。是的,它应该是一个 stampstream 类型的返回。
-
是“函数调用运算符”。它出现在函数或函数指针的右侧,立即调用它,并计算函数调用的结果(返回)。如果你想让
s << row(5)工作,那么row(5)需要返回operator<<可以接受的东西。