3


0

wistringstreamを使用してistring_iteratorをインスタンス化できません

https://stackoverflow.com/questions/236129/how-to-split-a-string/237280#237280 [このスレッド]にあるメソッドを使用して文字列を分割しようとしていますが、適応しようとしていますそれをwstringに。 しかし、私は奇妙なエラーにつまずきました。 コードを確認してください:

#include
#include
#include
#include
#include
#include

using namespace std;

int main(void)
{
    wstring str(L"Börk börk");
    wistringstream iss(str);
    vector tokens;
    copy(istream_iterator(iss), // I GET THE ERROR HERE
         istream_iterator(),
         back_inserter< vector >(tokens));

    return 0;
}

正確なエラーメッセージは次のとおりです。

error: no matching function for call to 'std::istream_iterator, std::allocator >, char, std::char_traits, int>::istream_iterator(std::wistringstream&)'

渡された iss(istringstreamではなく w istringstream)を使用してistream_iteratorをインスタンス化できないと言っていると思います。 これは、XCodeおよびGCC 4.2を使用するMac上で実行されます。 そして知る限り、wistring_iteratorまたはそのようなものはありません。

wstring以外のバージョンを使用している場合、完全に機能します。 ご覧のとおり、宣言を変更して wstring、` wistringstream`s、および `vector`を使用し、すべてを置き換えてワイドバージョンを使用しています。

何が原因で、なぜwstring-versionを受け入れないのでしょうか?

1 Answer


5


エラーメッセージの後半では、istream_iterator()のデフォルトのパラメーター2および3をオーバーライドして、他の場所でのワイド文字の使用に一致させる必要があります。 Visual C ++では、このバージョンは私にとって問題なくコンパイルできます。

copy(istream_iterator >(iss), // I DO NOT GET THE ERROR HERE
    istream_iterator >(),
    back_inserter< vector >(tokens));