2017-02-11 78 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 :: ostream的這需要在名稱對象作爲我的右手參數 //現在,當我添加了「」過載..它送給我的錯誤錯誤而運算符重載(錯誤:不對應的 '運營商<<'(操作數的類型是 '的std :: basic_ostream <char>' 和 '爲const char [2]')

//錯誤是這樣的: 錯誤:'操作符< <'(操作數類型是'std :: basic_ostream'和'const char [2]')不匹配 返回< < name.first < <「」< < name.second; ^

+0

錯誤消息中有很多有用的信息。 – juanchopanza

+0

你是什麼意思? –

+0

我的意思是讀取錯誤信息,看看你的代碼,並找出它。或者如果您需要幫助,請發佈[mcve]並解釋您遇到的問題。 – juanchopanza

回答

1

感謝您上傳所有細節 - 問題現在可以回答。

編譯器無法達到您提供的重載,因爲istream和istream在編譯時不是完整的類型。

你需要寫

#include <iostream> 

糾正這一點。有時候編譯器診斷是遲鈍的。

相關問題