Я пытаюсь работать над перегрузкой оператора, мой заголовочный файл состоит из:
#ifndef PHONENUMBER_H
#define PHONENUMBER_H
#include<iostream>
#include<string>
using namespace std;
class Phonenumber
{
friend ostream &operator << ( ostream&, const Phonenumber & );
friend istream &operator >> ( istream&, Phonenumber & );
private:
string areaCode;
string exchange;
string line;
};
#endif // PHONENUMBER_H
И определение класса
//overload stream insertion and extraction operators
//for class Phonenumber
#include <iomanip>
#include "Phonenumber.h"
using namespace std;
//overloades stram insertion operator cannot be a member function
// if we would like to invoke it with
//cout<<somePhonenumber
ostream &operator << ( ostream &output, const Phonenumber &number)
{
output<<"("<<number.areaCode<<")"
<<number.exchange<<"-"<<number.line;
return output;
}//end function opertaor <<
istream &operator >> ( istream &input, Phonenumber &number)
{
input.ignore(); //skip (
input>>setw(3)>>number.areaCode;//input areacode
input.ignore(2);//skip ) and space
input>>setw(3)>>number.exchange;//input exchange
input.ignore();//skip -
input>>setw(4)>>number.line;//input line
return input;
}
вызов через main
#include <iostream>
#include"Phonenumber.h"
using namespace std;
int main()
{
Phonenumber phone;
cout<<"Enter number in the form (123) 456-7890:"<<endl;
//cin>> phone invokes operator >> by implicitly issuing the non-member function call operator>>(cin,phone)
cin >> phone;
//cout<< phone invokes operator << by implicitly issuing the non-member function call operator>>(cout,phone)
cout << phone<<endl;
return 0;
}
но компиляция этого показывает мне ошибку компилятора: undefined reference to 'operator>>(std:istream&, Phonenumber&)'
Может ли кто-нибудь помочь мне решить эту ошибку
istraem
в определении оператора входного потока. Но это просто опечатка, не так ли? - person Luca Geretti   schedule 22.06.2012phonenumberObj << ostrObj
? Редактировать: Неважно, как-то пропустили второй аргумент ^^ - person Sebastian Hoffmann   schedule 22.06.2012using namespace std;
. Я бы не стал заходить так далеко, я думаю, все в порядке, пока вы ограничиваете его возможности. Но я думаю, что все согласятся с тем, что вы не должны помещать его в глобальное пространство имен в заголовке. - person Benjamin Lindley   schedule 22.06.2012using namespace std;
в них, и вы узнаете, кто это говорит. Не я. - person Benjamin Lindley   schedule 22.06.2012using namespace std;
изPhonenumber.h
. - person moooeeeep   schedule 22.06.2012using namespace std;
. Это бесполезно для начинающих; это бесполезно в больших проектах; он имеет очень ограниченное законное использование. stackoverflow.com/search?q=using+namespace+std+[c%2B%2B ] - person CB Bailey   schedule 22.06.2012