2017-02-11 13 views
-1
#ifndef NAME_H 
#define NAME_H 
#include <string>        // For string class 

class Name 
{ 
private: 
std::string first{}; 
std::string second{}; 

public: 
    Name(const std::string& name1, const std::string& name2) : first(name1), second(name2){} 
    Name()=default; 
    std::string get_first() const {return first;} 
    std::string get_second() const { return second; } 

    friend std::istream& operator>>(std::istream& in, Name& name); 
    friend std::ostream& operator<<(std::ostream& out, const Name& name); 
}; 

// Stream input for Name objects 
inline std::istream& operator>>(std::istream& in, Name& name) 
{ 
    return in >> name.first >> name.second; 
} 

// Stream output for Name objects 
inline std::ostream& operator<<(std::ostream& out, const Name& name) 
{ 
    //My error is here while I am adding " " in the overload 
    return out << name.first << " " << name.second; 
} 

'のstd :: basic_ostream ' と 'のconst charが[2]')//私は< <に過負荷をかけたかった '演算子<<' の一致ではありませんNameオブジェクトを私の右手のパラメータとして取り込む //オーバーロードで ""を追加したときにエラーが表示されます エラーは、オペレータのオーバーロード(エラーながら:(オペランドの型は

//このエラーは次のようになります。 エラー: 'operator < <'(オペランドタイプは 'std :: basic_ostream'と 'const char [2]')と一致しません < < name.first < < "" < < name.second; ^

+0

エラーメッセージには多くの有用な情報があります。 – juanchopanza

+0

あなたはどういう意味ですか? –

+0

私は、エラーメッセージを読んで、コードを見て、それを理解することを意味します。ヘルプが必要な場合は、[mcve]を投稿して、問題の原因を正確に説明してください。 – juanchopanza

答えて

1

すべての詳細をアップロードしていただきありがとうございます。今質問は回答可能です。

istreamおよびistreamはコンパイル時点で完全な型ではないため、コンパイラが提供したオーバーロードには到達できません。

あなたはそれを是正するために

#include <iostream> 

を記述する必要があります。時にはコンパイラ診断が鈍いことがあります。

関連する問題