2015-11-10 96 views
1

我仍在練習C++,並且在文件流上使用char迭代器時遇到問題。使用迭代器將文件的一部分複製到另一個文件

我想將文件的一部分複製到另一個(臨時)文件中。我想在第一個文件(我使用std :: find算法)中找到一個特定的字符串,以便知道我能夠「剪切」要複製的文件的部分(希望是有道理的)。我的問題是,使用下面的代碼我有一個編譯錯誤,我不太明白。

我的代碼有問題的部分看起來像這樣:

​​

而且編譯錯誤,我在「stl_algo.h」越來越:

error: no match for 'operator==' in '__first.std::istreambuf_iterator<_CharT, _Traits>::operator*<char, std::char_traits<char> >() == __val' 

預先感謝您。

+0

流不是容器。他們是_flows的數據_... –

+0

它可能是你傳遞位置作爲一個自動複製()哪些期望顯式類型? – EkcenierK

+0

@KLibby我之前得到了同樣的錯誤,當我用explixit類型定義位置時。我試圖把它改爲auto,希望這是我得到一個錯誤的原因,但它沒有改變任何東西。 ^^ – eMeLink

回答

1

編譯錯誤應該帶有一個實例化的回溯,告訴你你最終導致了哪個錯誤。

在你的情況下,這將指向find調用。 find查找單個元素,迭代器的元素類型是單個字符,但是會傳遞一個字符串。 (根據您的描述,您的代碼段實際上並不告訴我們refToReplace的類型。)

您正在查找的算法是search,但這需要前向迭代器,其中streambuf迭代器不是。

您將需要選擇不同的方法。

+0

在構建消息中,我在std :: find調用的行中收到了一條「從這裏需要」的警告,我想這就是你所指的。 – eMeLink

+0

我使用了std :: find算法,因爲它與==運算符一起工作,所以我認爲它可以與字符串一起工作,但是您所說的內容完全有意義。 ^^ 但最後,有沒有辦法使用迭代器在文件中搜索子字符串,還是必須完全更改我的代碼片段? – eMeLink

+0

有沒有簡單的方法。有適配器將流迭代器變成前向迭代器(Boost.Spirit包含一個);它會與那些工作。 –

相關問題