【发布时间】:2019-04-07 14:16:54
【问题描述】:
我有一个家庭作业任务,我应该完成位于单独文件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
【问题讨论】:
-
恕我直言,您应该将
Company的类定义放入单独的头文件中,例如company.hpp,以及方法实现到相关的源文件中,例如公司.cpp。接下来,告诉您的编译器或 IDE,您有main.cpp和company.cpp文件(如何执行此操作取决于您的 IDE 或构建系统)。
标签: c++ object pointers vector stl