私は以下のコードを書いていませんでした。オープンソースでもうサポートされていません。私はVC++ Express 2010をインストールしたので、ほとんどの問題を解決することができたので、アプリケーションは実際にはWindowsのために書かれていましたが、髪の毛が引っ張られてはいましたが、私はいくつかの進歩を遂げています。std:string + WCHARをgccコードをVisual C++ 2010に連結する必要があります
私は1つの変換に引っかかっていると私はかなりVC++ 2010型変換のハンドルをもらっていないが、ここでコードが私に私の最後の頭痛の種を与えている...
パスがのstd :: stringとcFileNameですWCHARです。私はパスをWCHARに変換するのに成功しましたが、mEntries.push_backに問題がありました。私が必要としているのは、cFileNameを文字列に変換することです。これを行うためのさまざまな方法を試してみましたが、構文が間違っているか、VC++で動作していないか、
なぜそれがうまくいかず、文字列の多くの異なる "種類"がある(私はSQLスクリプトを書いていますが、これはばかげています)が、この時点では機能するように助けが必要です。
// Add files matching file spec to listing, returning number added. Each
// filename is prepended with its path, if one was supplied in file spec.
unsigned int DirList :: Add(const string & fspec) {
// save path, if any
STRPOS lastslash = fspec.find_last_of("\\/");
string path = lastslash == STRNPOS ? "" : fspec.substr(0, lastslash + 1);
unsigned int count = 0;
WIN32_FIND_DATA fd;
HANDLE h = FindFirstFile(LPCWSTR(fspec.c_str()), & fd);
if (h == INVALID_HANDLE_VALUE) {
return count;
}
do {
mEntries.push_back(
new WinDirEntry(
path + fd.cFileName, // add path back on
fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
)
);
count++;
} while(FindNextFile(h, & fd));
FindClose(h);
return count;
}
エラーメッセージは次のとおりです。
error C2782: 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const _Elem *)' : template parameter '_Elem' is ambiguous
1> ...\microsoft visual studio 10.0\vc\include\string(143) : see declaration of 'std::operator +'
1> could be 'WCHAR'
1> or 'char'
error C2784: 'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,std::basic_string<_Elem,_Traits,_Alloc> &&)' : could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Alloc> &&' from 'WCHAR [260]'
1> ...\microsoft visual studio 10.0\vc\include\string(109) : see declaration of 'std::operator +'
error C2676: binary '+' : 'std::string' does not define this operator or a conversion to a type acceptable to the predefined operator
迅速なソリューションを使用することです'Find *'のansiバージョンです。これは明示的に 'FindFirstFileA'を使用しています。それ以外の場合は、おそらく[WideCharToMultiByte](http://msdn.microsoft.com/en-us/library/dd374130/(v = vs.85 \).aspx)のようなものが必要です – user786653
ありがとうuser786653、私はFindFirstFileAを試してみましたが、 fspecに問題があったので、LPCWSTRのキャストを取り除きました。残念ながら、 "&" [errorC2664でパラメータ2をWIN32_FIND_DATA *からLPWIN32_FIND_DATAAに変換できませんでした]という問題がありました。WideCharToMultiByteの例を探していますが、今は私の頭の中に少しあると思います... – Acy
@Acy:続けて 'WIN32_FIND_DATA'の代わりに' WIN32_FIND_DATAA'を使います。 – dalle