我正在为项目设计Money对象。我不是在寻求实施方面的帮助,因为我必须自己解决这个问题,但是我得到了以下错误(这是唯一的错误!)
错误C2678:二进制'>>' :找不到哪个运算符带有'std :: istream'类型的左手操作数(或者没有可接受的转换)
我的Money.h或Money.cpp文件中没有错误,只有test.cpp文件。以下是所有三个文件的内容:
Money.h
#ifndef MONEY_H
#define MONEY_H
#include <iostream>
#include <string>
class Money
{
public:
Money( );
Money( int dollars, int cents );
friend std::istream& operator>>( std::istream &i, Money &m );
private:
int dollars;
int cents;
};
#endif
Money.cpp
#include "Money.h"
Money::Money(void) : dollars(0), cents(0)
{
}
Money::Money( int dollars, int cents ) : dollars(dollars), cents(cents)
{
}
std::istream& operator>>( std::istream &i, Money &m )
{
int d;
int c;
char input;
std::string dollars = "";
std::string cents = "";
input = std::cin.peek();
while (std::cin.peek() != '.')
{
if ( !( (input >= '0') && (input <= '9') ) )
{
std::cin.ignore();
}
else
{
input = std::cin.get();
}
dollars += input;
}
if ( std::cin.peek() == '.')
{
std::cin.ignore();
}
std::cin >> cents;
d = atoi(dollars.c_str());
c = atoi(cents.c_str());
m = Money(d, c);
return i;
}
最后,test.cpp:
#include "Money.h"
int main()
{
Money newMoney();
std::cout << "Enter a money object!" << std::endl;
std::cin >> newMoney;
}
所以,你有它。我非常确定这是我可以得到的减少。
答案 0 :(得分:2)
问题中没有足够的数据。但是,在咨询我的水晶球时,我发现您的.CPP文件中已经定义了 operator>>
,但未能声明 operator>>
。小时。
将以下行添加到.H:
std::istream& operator>>( std::istream &i, Money &m );
我的水晶球有问题。错误在于:
Money newMoney();
这不会声明名为Money
的{{1}}对象。它声明了一个名为newMoney
的外部函数,它不接受参数并返回newMoney
个对象。用这个替换该行:
Money
答案 1 :(得分:0)
除了正常情况我没有突然出现这个
std::istream& operator>>
作为
friend std::istream& operator>>