Hulp nodig met c ++ sytem () functionn

ok, dus ik schreef een programma dat scaans alle directories en submappen scoorde om sepcific bestandsextensies te vinden (ik passeer een string voor het extensie type dat ik wil) dan retourneert het een vector met alle bestandsnamen met de specifieke bestandstype extensies. dan heb ik een andere klasse die een functie heeft die alle bestanden in de vector afdrukt en vervolgens de vector zal herhalen en een programma in die vector zal uitvoeren dat de gebruiker kiest. Dit is mijn probleem. Het bestand van de vvector ophalen om uit te voeren. ik gebruik visuele studio's op windows 7  met behulp van boost-bestandssysteem V3. dit is mijn huidige functie:

#define BOOST_FILESYSTEM_NO_DEPRECATED

#ifndef NotePad__h
#define NotePad__h

#include boost/filesystem.hpp
#include iostream
#include io.h
#include stdlib.h
#include stdio.h
#include cstdlib
#include Windows.h
#include atlstr.h
#include string
#include cstring
;
namespace fs = boost::filesystem;

class NpLaunch 
{
public:
    void Launch (const std::vector& v)
    {
        int count=0;
        std::cout << "launched in notePad.h" << std::endl;
        for(auto i = v.begin(); i!= v.end(); ++i)
        {
            //string s;
            //string val = (string) itr;
            std::cout << count << ". " << *i << std::endl;
            ++count;
            std::string s = i->c_str();
            //std::system(i->c_str());
        }
    }

};

#endif

en dit is de fout die ik krijg:

Error 1 error C2440: 'initializing' : cannot convert from 'const >boost::filesystem3::path::value_type *' to 'std::basic_string<_Elem,_Traits,_Ax>' >c:\users\admin\documents\visual studio 2010\projects\launcher\launcher\notepad.h 31

1
Gewoon een gok, probeer wstring in plaats van string.
toegevoegd de auteur Mark Ransom, de bron
wilde weten of een statische cast zou moeten werken als dat zou werken. niet op zoek naar antwoorden maar hints/tips
toegevoegd de auteur user1084319, de bron

1 antwoord

In Windows is path :: value_type een wchar_t en dus is path :: string_type gelijk aan std :: wstring , en de methode path :: c_str() retourneert een wchar_t * . U kunt een wchar_t * niet toewijzen aan een std :: string , dat is wat de compilerfout u probeert te vertellen.

Als u een pad -object wilt toewijzen aan een std :: string , moet u een tekenconversie uitvoeren van wchar_t naar char . De methode path :: string() doet dit voor u, bijvoorbeeld:

std::string s = i->string(); 

Gebruik anders in plaats daarvan een std :: wstring , die u kunt toewijzen aan het pad path :: native() of :: wstring() methode, bijv .:

std::wstring s = i->native(); 

std::wstring s = i->wstring(); 
2
toegevoegd
Dank je wel, maar ik heb het ongeveer 2 minuten nadat ik deze hahah had gepulst, maar toch bedankt
toegevoegd de auteur user1084319, de bron