Я не писал код ниже, он с открытым исходным кодом и больше не поддерживается. Мне нужно внести в него несколько изменений, чтобы я установил VC ++ Express 2010, и мне удалось решить большинство проблем, и приложение фактически было написано для Windows с самого начала, так как оно было утомительным, но достаточно сложным Я делаю успехи.
Я застрял на одном преобразовании и не совсем разбираюсь в преобразованиях типов 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