如何将从txt读取球队名存入vector的C++代码封装为类
问题核心错误点
getTeam()声明与定义返回类型不匹配:类内声明为vector<unsigned char> const&,和你实际需要返回的vector<string>类型冲突,同时函数定义漏写了参数括号- 缺少实际读取文件、解析球队名的执行逻辑,仅设置了文件名没有触发读取操作
- 全局的字符串拆分函数可以封装到类内作为私有工具,避免全局污染
修正后的完整可运行代码
#include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; class TeamFileReader { public: // 设置要读取的文件名 void setFileName(string name) { fileName = name; } // 执行文件读取、解析逻辑,返回是否读取成功 bool load() { ifstream readTeam(fileName); if (!readTeam) { cerr << "Error while opening the file.\n"; return false; } teams.clear(); // 清空之前的旧数据 string line; while (getline(readTeam, line)) { teams.push_back(processLine(line)); } readTeam.close(); return true; } // 返回存储球队名的vector,对外只读 const vector<string>& getTeams() const { return teams; } private: string fileName; vector<string> teams; // 类内私有工具函数,拆分球队名 string processLine(const string& s) const { string::size_type pos = s.find('-'); if (pos != string::npos) { return s.substr(0, pos); } return s; } }; int main() { TeamFileReader pullTeams; pullTeams.setFileName("teams.txt"); // 读取文件 if (pullTeams.load()) { // 打印结果 int g = 1; for (const auto& team : pullTeams.getTeams()) { cout << g << " " << team << endl; g++; } } return 0; }
主要改动说明
- 统一了
getTeams()的声明定义,返回类型为const vector<string>&,符合存储球队名的类型需求 - 新增
load()方法,将原本写在main里的文件读取、解析逻辑封装到类内部,调用该方法即可完成数据加载 - 将
teams存储容器和字符串拆分函数改为私有成员,符合封装原则,避免外部意外修改内部数据 - 增加读取结果返回值,方便上层判断是否读取成功
内容的提问来源于stack exchange,提问作者Tim's
相关产品推荐
相关产品推荐

