首页 > 解决方案 > 在 C++ 的单独头文件中完成函数体?

问题描述

我有一个家庭作业任务,我应该完成位于单独文件中的函数主体,该文件Find.h应该以下面编写的代码应该成功编译的方式完成:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include "Find.h"
using namespace std;
class Company {
    std::string name;
    int id;
public:
    std::string getName() const {
        return this->name;
    }

    int getId() const {
        return this->id;
    }

    friend std::istream& operator>>(std::istream& stream, Company& company);
};

std::istream& operator>>(std::istream& stream, Company& company) {
    return stream >> company.name >> company.id;
}

std::ostream& operator<<(std::ostream& stream, const Company& company) {
    return stream << company.getName() << " " << company.getId();
}

int main() {
    using namespace std;
    vector<Company*> companies;
    string line;
    while (getline(cin, line) && line != "end") {
        istringstream lineIn(line);

        Company* c = new Company();
        lineIn >> *c;
        companies.push_back(c);
    }

    string searchIdLine;
    getline(cin, searchIdLine);
    int searchId = stoi(searchIdLine);

    Company* companyWithSearchedId = find(companies, searchId);

    if (companyWithSearchedId != nullptr) {
        cout << *companyWithSearchedId << endl;
    }
    else {
        cout << "[not found]" << endl;
    }

    for (auto companyPtr : companies) {
        delete companyPtr;
    }

    return 0;
}

这是我完成Find.h文件的不完整尝试(程序应输出与给定 id 匹配的公司的 id 和名称):

#ifndef FIND_H
#define FIND_H
#include "Company.h"
#include <vector>
using namespace std;
Company* find(vector<Company*> vc, int id) {

    for (int i = 0; i < vc.size(); i++) {
        if (vc[i]->getId() == id) {
            //I do not know what to write here as to return a pointer 
            //to the required element so as to fulfil the requirement?
        }
    }
    return nullptr;
}
#endif // !FIND_H

标签: c++objectpointersvectorstl

解决方案


对于 .h 文件 for 循环中的特定问题,请尝试:

return vc[i]; //vc is a vector of Company pointers, this returns the pointer at vc index i

对于输出部分,请考虑:

cout << companyWithSearchedId->getId() << " " << companyWithSearchId->getName() << endl;

总的来说,这里还有更多问题,花点时间解决它。


推荐阅读