2017-05-13 6 views
0

これは私の最初の質問です私はそれらを編集しようとします:) main.cpp | 103 | error: 'operator <<'と一致しません(オペランドタイプは 'std :: ostream {別名std :: basic_ostream <char>}'と 'Person'です)

私はいくつかのデータ型Xの3つの変数の最大値を見つけて返しますこの関数を持っています。

template <class X> 
X fmax(X a, X b, X c) 
{ 
    X temp=a; 
    if (b>temp) 
     temp=b; 
    if(c>temp) 
     temp=c; 
    return temp; 
} 

次に、この

class Person 
{ 
private: 
    char* name; 
    int height; 
    char gender; 
public: 
    Person(){} 
    Person(char * name,int height, char gender) 
    { 
     int sz=strlen(name); 
     this->name= new char [sz]; 
     strcpy(this->name,name); 
     this->height=height; 
     this->gender=gender; 
    } 
    void setName(char* name) 
    { 
     int sz=strlen(name); 
     this->name= new char [sz]; 
     strcpy(this->name,name); 
    } 
    void setHeight(int h){this->height=h;} 
    void setGender(char g){this->gender=g;} 
    char* getName(){return this->name;} 
    int getHeight(){return this->height;} 
    char getGender(){return this->gender;} 

    Person operator= (Person p) 
    { 
     int sz=strlen(p.getName()); 
     this->name= new char [sz]; 
     strcpy(this->name,p.getName()); 
     this->height=p.getHeight(); 
     this->gender=p.getGender(); 
     return *this; 

    } 
    bool operator> (Person p) 
    { 
     if(this->getHeight()>p.getHeight())//The persons should be compared using their heights. 
      return true; 
     return false; 
    } 
}; 

のように見え、私はまたのostreamオーバーロードされたPersonクラスがあります:

ostream &operator<<(ostream &mystream, Person &p) 
{ 
mystream<<"The person's name is: "<<p.getName()<<endl; 
mystream<<"The person's height is: "<<p.getHeight()<<endl; 
mystream<<"The person's gender is: "<<p.getGender()<<endl; 
return mystream; 
} 

をしかし、私は私のメインのエラーを取得していますが:

int main() 
{ 
    Person a("Zacky",178,'m'); 
    Person b("Jimmy",199,'m'); 
    Person c("Matt",200,'m'); 
    Person d=fmax(a,b,c); 
    cout<<d<<endl; 
    cout<<fmax(a,b,c);<<endl;//the error strikes here. 
    return 0; 
} 

明らかに私は、私はfmax関数を使用して初期化した後にbをdしますが、関数によって返されるものを直接には取り出すことはできません。私は何を修正する必要があるのか​​?

P.S./

答えて

0

あなたは次のことを変更する必要があります:

fmax()がunchangable 右辺値を返すので、あなたがしなければならない、これは私がサイトを検索し、似たような見つけることができませんでした、前に頼まれた場合、私は完全にごめんなさい出力演算子のオーバーロードのシグネチャとして

を使用します(これは一般的に行うことをお勧めします)。

class Person 
{ 
    // ... 
    const char* getName() const {return this->name;} 
    int getHeight() const {return this->height;} 
    char getGender() const {return this->gender;} 
}; 
:今度はあなたのゲッター機能 constメンバ関数を作るために必要となること

関連する問題