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.Jamesstring
和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;