C++ C++;无法使用矢量<;字符串>;作为返回类型

C++ C++;无法使用矢量<;字符串>;作为返回类型,c++,string,vector,return-type,C++,String,Vector,Return Type,我正在尝试使用建议的函数通过除数器分割字符串,但每当我尝试使用vector作为返回类型时,就会出现一些错误 我做了一个简单的函数,返回一个向量作为测试,但仍然得到相同的错误: // Test.h #pragma once #include <vector> #include <string> using namespace std; using namespace System; namespace Test { vector<string&g

我正在尝试使用建议的函数通过除数器分割字符串,但每当我尝试使用
vector
作为返回类型时,就会出现一些错误

我做了一个简单的函数,返回一个
向量作为测试,但仍然得到相同的错误:

// Test.h
#pragma once

#include <vector>
#include <string>

    using namespace std;
using namespace System;

namespace Test
{
    vector<string> TestFunction(string one, string two);
}
//Test.h
#布拉格语一次
#包括
#包括
使用名称空间std;
使用名称空间系统;
名称空间测试
{
向量测试函数(字符串一、字符串二);
}

//Test.cpp
#包括“stdafx.h”
#包括“Test.h”
名称空间测试
{
向量测试函数(字符串一、字符串二){
向量事物(一,二);
归还物;
}
}
以及错误的屏幕截图:


有人知道为什么我不能使用
vector
作为返回类型吗?

字符串类型实际上是
std::
名称空间的成员。函数的正确返回类型为
std::vector

您可以避免在CPP文件中使用
std::
前缀,因为行
使用名称空间std,但在标题中,必须包含
std::
前缀

无论您做什么,都不要使用命名空间std放置

这不是有效的构造函数:

vector<string> thing(one, two);
template <typename InputIterator>
vector( InputIterator b, InputIterator e );
向量事物(一,二);
更改为(例如):

std::vector TestFunction(std::string one,std::string two){
向量事物;
东西。推回(一);
东西。推回(两个);
归还物;
}

还考虑将参数更改为代码> const STD::String和以避免不必要的拷贝。

< P>问题不是返回类型,而是调用构造函数。编译器正在选择
std::vector
构造函数:

vector<string> thing(one, two);
template <typename InputIterator>
vector( InputIterator b, InputIterator e );

您的返回类型必须是
std::vector
@e.James
string
vector
都在
std
命名空间中,对吗?所以不应该
使用名称空间std注意这个?旁白:通常认为在.h文件中使用
是非常糟糕的做法。特别是一个引用名称空间和类型
向量的东西(一,二)这不会用两个字符串初始化向量,没有这样的构造函数。@威尔霍尔:是的,我的错。我没有意识到标题中有一个
using
指令。吓人的!这似乎已经解决了它,不过,我希望能够根据您的链接使用列表语法,即:
vector thing{one,two}-但这是失败的,请参阅:如果编译器支持,您需要启用C++11功能以启用该语法。@根据,只有gcc已经支持初始值设定项列表(如果您遵循链接,则在其svn存储库中支持clang++)。我正在使用Visual Studio 2010-尽管此问题表明不支持初始值设定项列表,但D:-
std::vector<std::string> v;
v.push_back( one );
v.push_back( two );
return v;