我正在尝试使用建议的here函数来通过分隔符拆分字符串,但每当我尝试使用vector<string>
作为返回类型时,我会收到一些错误。
我做了一个简单的函数,它返回一个vector<string>
作为测试,但我仍然得到相同的错误:
// Test.h
#pragma once
#include <vector>
#include <string>
using namespace std;
using namespace System;
namespace Test
{
vector<string> TestFunction(string one, string two);
}
//Test.cpp
#include "stdafx.h"
#include "Test.h"
namespace Test
{
vector<string> TestFunction(string one, string two) {
vector<string> thing(one, two);
return thing;
}
}
错误的屏幕截图:
有谁知道为什么我似乎无法使用vector<string>
作为返回类型?
答案 0 :(得分:14)
这不是有效的vector<string>
构造函数:
vector<string> thing(one, two);
更改为(例如):
std::vector<std::string> TestFunction(std::string one, std::string two) {
std::vector<std::string> thing;
thing.push_back(one);
thing.push_back(two);
return thing;
}
另请考虑将参数更改为const std::string&
以避免不必要的复制。
答案 1 :(得分:2)
问题不在于返回类型,而在于对构造函数的调用。编译器正在选择std::vector
构造函数:
template <typename InputIterator>
vector( InputIterator b, InputIterator e );
作为最佳候选者,根据标准,将std::string
替换为InputIterator
参数。您的编译器似乎在内部使用traits来验证参数是否真正符合InputIterator
的要求并抱怨,因为std::string
不符合这些要求。
简单的解决方案是将函数中的代码更改为:
std::vector<std::string> v;
v.push_back( one );
v.push_back( two );
return v;
答案 2 :(得分:1)
字符串类型实际上是std::
命名空间的成员。函数的正确返回类型为std::vector<std::string>
。
由于行std::
,您可以避免在CPP文件中使用using namespace std;
前缀,但在标题中,您必须包含std::
}前缀。
无论您做什么,请不将using namespace std;
放入标题文件中。