C ++无法使用vector <string>作为返回类型</string>

时间:2012-03-09 20:36:33

标签: c++ string vector return-type

我正在尝试使用建议的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;
    }
}

错误的屏幕截图: Errors

有谁知道为什么我似乎无法使用vector<string>作为返回类型?

3 个答案:

答案 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;放入标题文件中。