C ++如何将argv保存为vector作为字符串

时间:2016-06-08 18:50:03

标签: c++ string visual-c++ vector argv

我正在尝试将argv保存为矢量作为字符串,但我不断收到错误:see reference to function template instantiation 'std::vector<_Ty>::vector<_TCHAR*[]>(_Iter,_Iter)' being compiled

我已经尝试了Save argv to vector or string但它不起作用

我正在使用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;
}

2 个答案:

答案 0 :(得分:5)

问题是std::string没有_TCHAR*类型的构造函数,因此您无法从_TCHAR*数组生成字符串向量。

尝试使用@NathanOliver所说的主要版本的“普通”版本:int main(int argc, char *argv[])

或切换到std::wstring

注意:如果没有启用unicode进行编译,_TCHAR*可能等同于char *,代码不会引起任何编译错误。

答案 1 :(得分: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(我不推荐),只需使用旧样式charmain