C 必须完全参数

c++ must take exactly one argument

本文关键字:参数      更新时间:2023-10-16

我是一个新的C 学习者。现在,我的代码有问题,但我不知道如何调试。请帮我。它是form.h文件。我尝试移动Val和运营商Lt;<形式。

class Form{
friend ostream& operator << (ostream&, const Form&);
int prc;
int fmt;
double val;
public:
explicit Form(int p=6):prc(p){
  fmt = 0;
  wdt = 0;
}
Form& scientific(){
 fmt = ios_base::scientific;
 return *this;
 }
Form& precision(int p){
 prc = p;
 return *this;
}
Form& fill(char);
std::ostream& operator<<(std::ostream& os, const Form& bf){
  ostringstream s;
  s.precision(bf.prc);
  s.setf(static_cast<ios_base::fmtflags>(bf.fmt), ios_base::floatfield);
  s.setf(bf.fmt,ios_base::floatfield);
  s << bf.val;
 return os << s.str() ;
 }
};

这是我的主要cpp:

Form gen4(4); // general format, precision is 4
void f(double d)
{
  Form sci8 = gen4;
  sci8.scientific().precision(8);
  Form fix8 = gen4;
  fix8.fixed().precision(8); 
  cout << d << sci8(d) << fix8(d) << d;
 }

当我编译时,它说:

error: ‘std::ostream& Form::operator<<(std::ostream&, const Form&)’ must take 
exactly one argument
error: no match for call to ‘(Form) (double&)’
<< "gen4 = " << gen4(d) << endl

尝试

// vvvvvv
   friend std::ostream& operator<<(std::ostream& os, const Form& bf)
// ^^^^^^
    {
      ostringstream s;
      // ...

实施操作员。

如果您忘记了类的Boby内部的friend关键字,则operator<< (std::ostream &, Form const &)Form的成员,<<的左侧的参数隐含在Form对象上,并且两个声明的参数均在右侧。

错误:'std :: ostream&amp;form ::操作员&lt;&lt;(std :: ostream&amp;,const form&amp;(必须采取正是一个参数

这是定义朋友函数的两种方法:

课内:

class Form
{
    friend ostream& operator << (std::ostream& os, const Form& bf)
    {
        // do something
    }
};

班级外:

class Form        
{
    friend ostream& operator << (std::ostream& os, const Form& bf);
};

ostream& operator << (std::ostream& os, const Form& bf)
{
    //do something
}

错误:与"(form((double&amp;("呼叫无匹配&lt;&lt;" gen4 ="&lt;&lt;gen4(d(&lt;&lt;endl

使用操作员超载,类似于此

class Form
{
    double operator()(double i)
    {
        //do something
    }
};