2016-06-08 3 views
4

я пытаюсь сохранить ARGV в вектор в виде строк, но я получаю сообщение об ошибке: see reference to function template instantiation 'std::vector<_Ty>::vector<_TCHAR*[]>(_Iter,_Iter)' being compiledC++ Как я сохраняю ARGV вектор как строки

Я попытался Save argv to vector or string и он не работает

I я использую Microsoft Visual Studio 2010.

Вот мой код:

#include "stdafx.h" 
#include <string> 
#include <vector> 
#include <iostream> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    std::vector<std::string> allArgs(argv + 1, argv + argc); 
    return 0; 
} 
+1

Скорее всего, вам нужно использовать версию 'main', отличную от MSVS, как' int main (int argc, char * argv []) ' – NathanOliver

+6

Если вы компилируете с помощью unicode, _TCHAR является широким символом, который требует std :: wstring вместо std :: string. – kfsone

+0

Поскольку вы используете Visual Studio, вам может и не понадобиться хранить эти значения вообще. Они доступны во всех ваших приложениях, используя символы [__argc, __argv, __wargv] (https://msdn.microsoft.com/en-us/library/dn727674.aspx). – IInspectable

ответ

5

проблема заключается в том, что std::string не имеет конструктор для типа _TCHAR*, поэтому вы не можете генерировать вектор строк из массива _TCHAR*.

Попробуйте использовать, как сказал @NathanOliver, «нормальный» вариант основного: int main(int argc, char *argv[]).

Или переключиться на std::wstring.

Примечание. Если компиляция с включенным юникодом, то _TCHAR* может быть эквивалентно char *, и код не будет вызывать ошибки компилятора.

3

Используйте это:

typedef std::basic_string<TCHAR> tstring; 
// Or: 
    // using tstring = std::basic_string<TCHAR>; 
// If you have latest compiler 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    std::vector<tstring> allArgs(argv + 1, argv + argc); 
    return 0; 
} 

И если вы всегда хотите использовать широкую-строку, используйте этот

int wmain(int argc, whar_t* argv[]) 
    { 
     std::vector<std::wstring> allArgs(argv + 1, argv + argc); 
     return 0; 
    } 

Или, если вы хотите иметь только ANSI (я не рекомендовал бы), просто используйте старый стиль char и main.

+0

Bogus typedef. Это должно действительно прочитать 'typedef std :: basic_string tstring;'. – IInspectable

+0

Бинго! Вы поняли это правильно. – Ajay

 Смежные вопросы

  • Нет связанных вопросов^_^