C ++ Невозможно использовать вектор <string>в качестве типа возврата - PullRequest
2 голосов
/ 10 марта 2012

Я пытаюсь использовать предложенные функции здесь , чтобы разделить строку с помощью разделителя, но я получаю несколько ошибок всякий раз, когда пытаюсь использовать 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 ]

14 голосов
/ 10 марта 2012

Это недопустимый 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&, чтобы избежать ненужного копирования.

2 голосов
/ 10 марта 2012

Проблема не в типе возвращаемого значения, а в вызове конструктора. Компилятор выбирает конструктор std::vector:

template <typename InputIterator>
vector( InputIterator b, InputIterator e );

как лучший кандидат, согласно стандарту, подставив std::string в качестве параметра InputIterator. Ваш компилятор, похоже, использует внутренние черты для проверки того, что аргумент действительно соответствует требованиям InputIterator, и жалуется, потому что std::string не удовлетворяет этим требованиям.

Простое решение - изменить код в функции на:

std::vector<std::string> v;
v.push_back( one );
v.push_back( two );
return v;
1 голос
/ 10 марта 2012

тип string на самом деле является членом пространства имен std::. Правильный тип возврата для вашей функции будет std::vector<std::string>.

Вы можете избежать использования префикса std:: в вашем файле CPP из-за строки using namespace std;, но в заголовке вы должны включить префикс std::.

Что бы вы ни делали, не помещайте using namespace std; в заголовочный файл.

...