typedef tuple<list<Teacher>, list<Student>, list<Dean>, list<Chancellor>> Totality;if (num == 1) { for (auto it = get<0>(per).begin(); it != get<0>(per).end(); it++) { if (sName == it->getName()) { get<0>(per).remove(*it); cout << "已删除教师:" << endl; it->outData(); break; } } } else if (num == 2) { for (auto it = get<1>(per).begin(); it != get<1>(per).end(); it++) { if (sName == it->getName()) { get<1>(per).remove(*it); cout << "已删除学生:" << endl; it->outData(); break; } } } else if (num == 3) { for (auto it = get<2>(per).begin(); it != get<2>(per).end(); it++) { if (sName == it->getName()) { get<2>(per).remove(*it); cout << "已删除系主任:" << endl; it->outData(); break; } } } else if (num == 4) { for (auto it = get<3>(per).begin(); it != get<3>(per).end(); it++) { if (sName == it->getName()) { get<3>(per).remove(*it); cout << "已删除校长:" << endl; it->outData(); break; } } } 为什么会报错
时间: 2024-03-25 12:35:47 浏览: 69
C++中list用法
4星 · 用户满意度95%
这段代码可能会出现错误的原因可能是因为缺少头文件或者命名空间。
如果你使用了标准库中的 tuple 类型,需要包含头文件 `<tuple>`。
如果你使用了 STL 中的 list 容器,需要包含头文件 `<list>`。
另外,需要使用 `std` 命名空间,可以在文件头部增加 `using namespace std;` 或者在使用 tuple 和 list 时加上 `std::` 前缀,例如 `std::tuple`。
下面是一个修改后的示例代码:
```c++
#include <iostream>
#include <tuple>
#include <list>
using namespace std;
class Person {
public:
virtual string getName() = 0;
virtual void outData() = 0;
};
class Teacher : public Person {
public:
Teacher(string name) : m_name(name) {}
string getName() { return m_name; }
void outData() { cout << "Teacher: " << m_name << endl; }
private:
string m_name;
};
class Student : public Person {
public:
Student(string name) : m_name(name) {}
string getName() { return m_name; }
void outData() { cout << "Student: " << m_name << endl; }
private:
string m_name;
};
class Dean : public Person {
public:
Dean(string name) : m_name(name) {}
string getName() { return m_name; }
void outData() { cout << "Dean: " << m_name << endl; }
private:
string m_name;
};
class Chancellor : public Person {
public:
Chancellor(string name) : m_name(name) {}
string getName() { return m_name; }
void outData() { cout << "Chancellor: " << m_name << endl; }
private:
string m_name;
};
typedef tuple<list<Teacher>, list<Student>, list<Dean>, list<Chancellor>> Totality;
int main() {
Totality per;
per = make_tuple(list<Teacher>(), list<Student>(), list<Dean>(), list<Chancellor>());
int num;
cout << "请输入要删除的人员类型(1. 教师 2. 学生 3. 系主任 4. 校长):";
cin >> num;
string sName;
cout << "请输入要删除的人员姓名:";
cin >> sName;
if (num == 1) {
for (auto it = get<0>(per).begin(); it != get<0>(per).end(); it++) {
if (sName == it->getName()) {
get<0>(per).remove(*it);
cout << "已删除教师:" << endl;
it->outData();
break;
}
}
} else if (num == 2) {
for (auto it = get<1>(per).begin(); it != get<1>(per).end(); it++) {
if (sName == it->getName()) {
get<1>(per).remove(*it);
cout << "已删除学生:" << endl;
it->outData();
break;
}
}
} else if (num == 3) {
for (auto it = get<2>(per).begin(); it != get<2>(per).end(); it++) {
if (sName == it->getName()) {
get<2>(per).remove(*it);
cout << "已删除系主任:" << endl;
it->outData();
break;
}
}
} else if (num == 4) {
for (auto it = get<3>(per).begin(); it != get<3>(per).end(); it++) {
if (sName == it->getName()) {
get<3>(per).remove(*it);
cout << "已删除校长:" << endl;
it->outData();
break;
}
}
}
return 0;
}
```
这个代码中,我们使用了 `using namespace std;` 命名空间,可以直接使用 tuple 和 list,而不需要添加 std 前缀。
阅读全文