c++报错

本文档展示了一个C++程序,其中在尝试使用`multimap`显示不同组别的员工时遇到问题。代码第58行尝试通过`find()`方法获取特定键的迭代器,但遇到了不允许多次初始化的错误。问题可能源于迭代器的使用不当或对容器操作的理解不准确。解决方案可能涉及检查迭代器的生命周期和容器状态。
部署运行你感兴趣的模型镜像

c++报错:

#include<iostream>
#include<string>
#include<vector>
#include<ctime>
#include<map>

using namespace std;

#define CESHI 1
#define YANFA 2
#define MEISHU 3

class Worker
{
public:
	string m_Name;
	int m_Salary;
};

void setWorkers(vector<Worker> & vWorkers)
{
	string nameSeed = "ABCDEFGHIJ";
	for (int i = 0; i < 10; i++)
	{
		Worker worker;
		//worker.m_Name = "员工"+nameSeed[i];
		worker.m_Name = "员工";
		worker.m_Name += nameSeed[i];
		worker.m_Salary = rand() % 1001 + 2000;//2001-3000

		vWorkers.push_back(worker);
	}
}

void setGroup(vector<Worker> & vWorkers, multimap<int, Worker> & mWorkers)
{
	vector<Worker>::iterator vit = vWorkers.begin();
	for (; vit != vWorkers.end(); vit++)
	{
		int DepartID = rand() % 3 + 1;//1,2,3
		mWorkers.insert( make_pair(DepartID,*vit));
	}
}

void showGroup(multimap<int, Worker> & mWorkers)
{
	//输出第一组员工,例如<1,A> <1,B> <1,F>
	multimap<int, Worker>::iterator  pos = mWorkers.find(CESHI); //返回key的迭代器
	int count = mWorkers.count(1);
	int index = 0;
	cout << "----------------第一组人员------------------------" << endl;
	for (; pos != mWorkers.end() && index < count ; pos++, index ++)
	{
		cout << pos->second.m_Name << " ";
	}
	cout << endl<<"-----------------------------------------------"<<endl;

	multimap<int, Worker>::iterator pos = mWorkers.find(YANFA); //返回key的迭代器
	count = mWorkers.count(YANFA);
	index = 0;
	cout << "----------------第二组人员------------------------" << endl;
	for (; pos != mWorkers.end() && index < count; pos++, index++)
	{
		cout << pos->second.m_Name << " ";
	}
	cout << endl << "-----------------------------------------------" << endl;

	pos = mWorkers.find(MEISHU); //返回key的迭代器
	count = mWorkers.count(MEISHU);
	index = 0;
	cout << "----------------第三组人员------------------------" << endl;
	for (; pos != mWorkers.end() && index < count; pos++, index++)
	{
		cout << pos->second.m_Name << " ";
	}
	cout << endl << "-----------------------------------------------" << endl;
}


void main()
{
	srand((unsigned int)time(NULL));

	//1.将10个员工存放在vector中
	vector<Worker> vWorkers;
	setWorkers(vWorkers);

	//测试:
	//vector<Worker>::iterator vit = vWorkers.begin();
	//for (; vit != vWorkers.end(); vit++)
	//{
	//	cout << " " << vit->m_Name << " 工资:" << vit->m_Salary << endl;
	//}
	//cout << endl;

	//2.员工分组
	multimap<int, Worker> mWorkerers;
	setGroup(vWorkers, mWorkerers);

	//测试
	//multimap<int, Worker>::iterator mit = mWorkerers.begin();
	//for (; mit != mWorkerers.end(); mit++)
	//{
	//	cout << mit->first << "  姓名" << mit->second.m_Name << endl;
	//}
	//cout << endl;

	//3.分组显示
	showGroup(mWorkerers);


	system("pause");
}

报错的图片
问题:
58行为什么不可以多次初始化?

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

C++ 开发中常见的报错提示信息如下: ### 编译时错误 - **找不到头文件**:报错信息通常类似 `fatal error: 'xxx.h' file not found`。例如在 Mac 更新系统版本后,可能会因 Xcode 命令行工具的某些文件路径丢失或者被修改,导致 C++ 编译器无法找到需要的头文件[^2]。 - **语法错误**:比如缺少分号、括号不匹配等。例如: ```cpp #include <iostream> int main() { std::cout << "Hello World" // 缺少分号 return 0; } ``` 编译时会提示类似 `error: expected ';' after expression` 的错误。 - **未定义标识符**:当使用了未定义的变量、函数或类时,会出现此类错误。例如: ```cpp #include <iostream> int main() { num = 10; // num 未定义 std::cout << num << std::endl; return 0; } ``` 报错信息可能是 `error: use of undeclared identifier 'num'`。 - **类型不匹配**:如将不同类型的数据进行赋值或运算。例如: ```cpp #include <iostream> int main() { int num; num = "hello"; // 类型不匹配 std::cout << num << std::endl; return 0; } ``` 会提示 `error: assigning to 'int' from incompatible type 'const char [6]'`。 ### 链接时错误 - **未定义的符号**:当调用了某个函数或使用了某个变量,但该函数或变量的定义未找到时,会出现此错误。例如,只声明了函数但没有定义: ```cpp // main.cpp #include <iostream> void func(); // 只声明 int main() { func(); return 0; } ``` 链接时会提示 `undefined symbol: _func`。 ### 运行时错误 - **段错误(Segmentation fault)**:通常是由于访问了非法的内存地址,比如访问空指针、越界访问数组等。例如: ```cpp #include <iostream> int main() { int* ptr = nullptr; *ptr = 10; // 访问空指针 return 0; } ``` 运行时会出现段错误。 ### 警告信息 不同编译器在警告提示上有差异,但常见的警告有: - **未使用的变量**:例如: ```cpp #include <iostream> int main() { int num = 10; // 变量 num 未使用 return 0; } ``` 编译器可能会提示 `warning: variable 'num' is uninitialized [-Wuninitialized]` 。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值