Нужна помощь с c ++ sytem () functionn - PullRequest
1 голос
/ 07 декабря 2011

хорошо, поэтому я написал программу, которая сканирует все каталоги и подкаталоги, чтобы найти отдельные расширения файлов (я передаю строку для нужного типа расширения), а затем возвращает векторную загрузку со всеми именами файлов с конкретными расширениями типов файлов.затем у меня есть другой класс, который имеет функцию, которая распечатывает все файлы в векторе, а затем выполняет итерацию вектора и запускает программу в этом векторе, которую выбирает пользователь.Это моя проблема.Получение файла из vvector для запуска.Я использую Visual Studio на Windows 7 с использованием файловой системы Boost V3.это моя текущая функция:

#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<fs::path>& 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

и это ошибка, которую я получаю:

Ошибка 1 ошибка C2440: «инициализация»: невозможно преобразовать из «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 Ответ

2 голосов
/ 07 декабря 2011

В Windows path::value_type - это wchar_t, поэтому path::string_type эквивалентно std::wstring, а метод path::c_str() возвращает wchar_t*. Вы не можете назначить wchar_t* для std::string, вот что пытается сообщить вам ошибка компилятора.

Чтобы назначить объект path для std::string, необходимо выполнить преобразование символов из wchar_t в char. Метод path::string() делает это для вас, например:

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

В противном случае используйте взамен std::wstring, который можно назначить с помощью метода path::native() или path::wstring(), например:

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

std::wstring s = i->wstring(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...