2014-02-10 191 views
0

在我InVal類,我有一個方法和一個朋友操作如下聲明:參數無效

void Parse(std::istream& file) throw (int); 
friend std::istream& operator >> (std::istream& is, const InVal& id3); 

的朋友操作>>代碼是這樣的:

std::istream& operator >> (std::istream& is, const InVal& val) { 
    val.Parse(is); 
    return is; 
} 

上線val.Parse(is)我得到Invalid arguments候選人報價是void Parse(std::basic_istream<char, std::char_traits<char>>&)。在iosfwd,我有

typedef basic_istream<char>   istream 

因此,某處某處不匹配。爲什麼我會收到錯誤,我該如何解決?

回答

2

valconst的參考,這意味着您只能在其上調用const成員函數。需要聲明Parse作爲const成員函數,像這樣:

void Parse(std::istream& file) const throw (int); 

此承諾,Parse不會修改它被調用的InVal對象的編譯器。

+0

啊!我一直被這個咬傷。 –

+0

也許最好讓'operator >>'non const的第二個參數?我假設在Parse方法中,你以某種方式加載InVal的內容。 –

+0

@PavelDavydov是的,這正是我所做的。 'const'出現是因爲我從'<<'運算符複製粘貼,然後將'ostream'改爲'istream',但忘記從第二個參數中刪除'const'。 –