私は演算子のオーバーロード上で動作するようにしようとしています、私のヘッダファイルで構成されていますオペレータへの未定義参照>>
#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;
}
メインを介して行う通話が
でのクラス定義#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'を見ています。しかしそれは単にタイプミスですね。 –
あなたは左手側の演算子を定義することができますか?あなたが 'phonenumberObj << ostrObj'を書くなら、それはこの演算子を呼ぶでしょうか?編集:気にしないで、何とか2番目の引数を忘れてしまった^^ – Paranaix
'namespace std; 'を使わないように言う人もいます。私はそれほど遠くに行かないだろう、あなたがその範囲を制限する限り、それは大丈夫だと思う。しかし、私は誰も*あなたがヘッダのグローバルな名前空間に入れてはならないと同意すると思います。 –