wstring 型の一行読込み(std::getline)について

[戻る]
マラソンマン 2009/08/23(日) 17:39:50
お世話になります、UTF-8 で書かれたファイル(日本語)を一行づつ読込んで処理を行い
たいのですが、
一行読込み変数をstd::wstring 型にしますと、下記のエラーが出ます、解決策をご教示
願えませんでしょうか。

環境:Visual Studio 2005 pro 及び、gcc (GCC) 4.2.4

#include <string>
#include <fstream> 

int main(int argc, char * argv[])
{
    std::wstring wline;
    std::ifstream ifs( *argv );
    if(ifs.fail())
        return false;
    while( getline(ifs, wline.c_str()) ) {
    }

    return 0;
}

error C2784: 'std::basic_istream<_Elem,_Traits>
&std::getline(std::basic_istream<_Elem,_Traits>
&,std::basic_string<_Elem,_Traits,_Alloc> &)' : テンプレート 引数を
'std::basic_istream<_Elem,_Traits> &' に対して 'std::ifstream' から減少できませ
んでした
'std::getline' の宣言を確認してください。

error C2784: 'std::basic_istream<_Elem,_Traits>
&std::getline(std::basic_istream<_Elem,_Traits>
&,std::basic_string<_Elem,_Traits,_Alloc> &)' : テンプレート 引数を
'std::basic_string<_Elem,_Traits,_Alloc> &' に対して 'const wchar_t *' から減少
できませんでした
'std::getline' の宣言を確認してください。

error C2780: 'std::basic_istream<_Elem,_Traits>
&std::getline(std::basic_istream<_Elem,_Traits>
&,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : 3 引数が必要です - 2
が設定されます。
'std::getline' の宣言を確認してください。

error C2143: 構文エラー : ')' が '{' の前にありません。
fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
myproje - エラー 5、警告 0

επιστημη [E-Mail] [HomePage] 2009/08/23(日) 19:20:40
ifstream 改め wifstream ちゃいますか?

aetos 2009/08/24(月) 01:22:31
それはそれとして、wstring で UTF-8 って読めるんですか。
実装にもよるでしょうけど、少なくとも VC++ で Unicode ってのは UTF-16 のことなの
ではないかと。
Windows では UTF-8 は MBCS の扱いですよ。

PAI 2009/08/25(火) 22:39:45
wifstream は
Shift_JIS で書かれたものを utf-16 で読み込むもの、
として実装されていたような気がします。

マラソンマン 2009/09/04(金) 11:21:47
[[解決]]
皆さん、回答ありがとうございましたそして、返事が遅れたことをお詫びします。
VC++ の場合、επιστημη さんのwifstream で目的が果たせました
aetos さんのご指摘のとおり、wstring ではUTF-8 は読めず、PAI さんのご指摘通りで
した
linux のUTF-8 はstring で扱う事ができたことを報告しておきます。

古いスレッドには追加発言できません。