void printAst(int x)
{
for( int i = 0; i < x; i++)
{
cout << "*";
}
cout << " (" << x << ")" << endl;
}
void printHisto(int histo[])
{
//cout.precision(3);
int count = 0;
for(double i = -3.00; i < 3.00; i += 0.25)
{
cout << setprecision(3) << i << " to " << i + 0.25 << ": " << printAst(histo[count]) << endl;
// cout << setw(3) << setfill('0') << i << " to " << i + 0.25 << ": " << histo[count] << endl;
count ++;
}
}
我希望我的输出格式如下,所以我使用了setprecision(3),这也不起作用。
-3.00至-2.75:(0)
-2.75到-2.50:*(1)
-2.50至-2.25:*(1)
-2.25到-2.00: * (6)
-2.00至-1.75: ** * ** (12)
所以它的格式是这样的
-3到-2.75:3
-2.75到-2.5:4
-2.5到-2.25:5
-2.25到-2:0
-2到-1.75:0
然而,主要的问题是当我尝试将printAst调用到histo [count]时。这是导致此错误的原因。 PrintAst用于打印星号,histo [count]提供要打印的星号数量。
cout&lt;&lt; setprecision(3)&lt;&lt; i&lt;&lt; “to”&lt;&lt; i + 0.25&lt;&lt; “:”&lt;&lt; printAst(histo [count])&lt;&lt; ENDL;
答案 0 :(得分:0)
您似乎对链接<<
如何在流中起作用存在误解。
cout << 42
看起来像一个带有两个操作数的运算符表达式,但它实际上是对具有两个参数的函数的调用(函数的名称是operator<<
)。此函数返回对流的引用,从而启用链接。
这样的表达式:
cout << 1 << 2;
相当于:
operator<<( operator<<(cout, 1), 2);
现在,问题是函数的参数不能是void
,而是printAst
返回的参数。相反,您需要返回可以流式传输的内容 - 换句话说,operator<<
已经重载的内容。我建议std::string
:
std::string printAst(int x);
{
std::string s = " (" + std::string(x,'*') + ")";
return s;
}
您可以阅读有关operator overloading的更多信息。