Не найдена соответствующая функция перегрузки Ошибка - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь вернуть вектор с шаблоном T с данными из файла для поиска в другой функции.

Программа, над которой я работаю, - это программа, в которой хранятся имя, дата рождения и адрес, которые были введены в программу.Я пытался сохранить возвращенный вектор в другом векторе с типом шаблона, но он продолжает показывать:

Ошибка C2672 'getDataToVector': не найдено соответствующей перегруженной функции

Ошибка C2783 'std ::vector> getDataToVector (std :: ifstream) ': не удалось вывести аргумент шаблона для' T '

template <class T>
void searchData(vector<string>& name, vector<int>& birthdate, vector<string>& address) {
    bool found = false;
    string entry;
    string line;
    int i = 0;

    cout << "Please enter the name you want to search: " << endl;
    getline(cin, entry);

    std::ifstream in;
    in.open("test_file.txt");
    vector<T> file_data = getDataToVector(in);

    while (!found) {
        if (std::find(file_data.begin(), file_data.end(), entry) != file_data.end()) {
            cout << "The name is found" << endl;
            cout << file_data[i] << endl;
            found = true;
        }
        i++;
    }


}

template <class T>
vector<T> getDataToVector(std::ifstream infile) {
    vector<T> data;
    string line;

    while (getline(infile, line)) {
        data.push_back(line);
    }
    return data;
}

Я новичок в программировании на C ++ и очень признателен за любую помощь, которую кто-либо может мне дать.

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Ошибка говорит о том, что она не может определить, каким должно быть T в getDataToVector.Он может быть либо выведен из аргументов (не применимо в вашем случае), либо вы можете установить его явно: getDataToVector<std::string>(in); означает T==std::string.В вашем случае вы хотите передать T из searchData -> getDataToVector<T>(in);

Но, глядя на ваш код, шаблоны вообще не нужны, line всегда std::string, поэтому data.push_back(line); означает, что только std::vector<std::string> имеет смысл.То же самое для searchData, так как T является избыточным и даже не является частью сигнатуры функции.

1 голос
/ 31 мая 2019

Для начала функция getDataToVector, если она не является функцией-членом класса, должна быть объявлена ​​перед функцией searchData, поскольку она указана в функции.

Во-вторых, параметр функции должен быть ссылкой

шаблон

vector<T> getDataToVector(std::ifstream &infile) {
                                       ^^^ 

Так как функция является функцией шаблона и не может вывести параметр шаблона, вы должны написать

vector<T> file_data = getDataToVector<T>(in);
                                     ^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...