调用提取重加载器会产生对"运算符"的未定义引用错误>>

Calling the extraction overloader produces error undefined reference to `operator>>

本文关键字:gt 运算符 错误 引用 未定义 加载 提取 调用      更新时间:2023-10-16

我正在尝试使用一个名为"美元"的类将浮点数更改为货币格式。 但是当我尝试使用美元类时,我遇到了错误。美元类具有和重载提取运算符:

istream & operator >> (istream & in, Dollars & rhs)
{
// initially zero                                                                        
rhs.cents = 0;
if (in.fail())
return in;
// skip leading spaces and dollar signs;                                                 
while (isspace(in.peek()) || in.peek() == '$')
in.get();
// is the next character a negative?                                                     
bool negative = false;
while ('-' == in.peek() || '(' == in.peek())
{
negative = true;
in.get();
}
// consume digits, assuming they are dollars                                             
while (isdigit(in.peek()))
rhs.cents = rhs.cents * 10 + (in.get() - '0');
// everything up to here was dollars so multiply by 100                                  
rhs.cents *= 100;
// did we get a decimal                                                                  
if ('.' == in.peek())
{
// consume the decimal                                                                
in.get();
// next digit is in the 10cent place if it exists                                     
if (isdigit(in.peek()))
rhs.cents += (in.get() - '0') * 10;
// the final digit is the 1cent place if it exists                                    
if (isdigit(in.peek()))
rhs.cents += (in.get() - '0');
}
// take care of the negative stuff                                                       
rhs.cents *= (negative ? -1 : 1);
// see if there is a trailing )                                                          
if (')' == in.peek())
in.get();
return in;
}

这是我尝试使用它的地方:

Dollars dollar;
cout << "Float to convert to Dollars: ";
cin >> dollars;

然后我在编译时只收到此错误:

对"operator>>(std::istream&, Dollar&("的未定义引用 collect2:错误:ld 返回 1 个退出状态

你写了operator <<但你试图调用operator >>