当我在PhoneNumber.h中使用friend作为操作员功能时,PhoneNumber.cpp表现良好。但是使用static时,它不能被编译(为什么?),以及声明它的其他方法是什么(即,除了Friend以外的所有方法)。
PhoneNumber.h
#include<iostream>
#include <string>
#include<iomanip>
using namespace std;
class PhoneNumber{
public:
string areaCode, exchange, line;
static ostream& operator<<(ostream &output, const PhoneNumber&);
static istream& operator>>(istream &input, PhoneNumber&);
};
PhoneNumber.cpp
#include"PhoneNumber.h"
using namespace std;
ostream& PhoneNumber::operator<<(ostream &output, const PhoneNumber& obj){
output << "(" <<obj. areaCode << ") "
<< obj.exchange << "-" << obj.line;
return output;
};
istream& PhoneNumber::operator>>(istream &input, PhoneNumber&obj){
input.ignore();
input >> setw( 3 ) >> obj.areaCode;
input.ignore( 2 );
input >> setw( 3 ) >> obj.exchange;
input.ignore();
input >> setw( 4 ) >> obj.line;
return input;
};
main.cpp
#include"PhoneNumber.h"
using namespace std;
int main(){
PhoneNumber phone;
cout << "Enter phone number in the form (123) 456-7890:" << endl;
cin>>phone;
cout << "The phone number entered was: ";
cout<<phone;cout << endl;
int y;cin>>y;
return 0;}
答案 0 :(得分:0)
重载的运算符不能是静态成员函数,请参见[over.oper](强调是我的)。
操作员函数应为非静态成员函数或为非成员函数,其至少具有一个类型为类,对类的引用,枚举,或对枚举的引用。