【C++】编译报错

本文概述了C++11以后在实际编程中遇到的四个常见编译错误,包括const_iterator的修改、std::make_pair的用法、对const unordered_map的操作和未重载运算符的处理。通过实例演示如何解决这些问题,提升代码健壮性。
摘要由CSDN通过智能技术生成

C++11以后,语言的新特性增加得越来越多,在实际使用过程中这些特性容易将错误提前在编译器暴露出来,记录一下C++程序编译过程中,出现的那些错误:

【错误1】无法从"const _Ty2"转换为"value_type&"
使用了const_iterator,并且需要修改值;将迭代器const_iterator修改为iterator即可;

【错误2】 std::pair<key_type, value_type> std::make_pair<key_type, value_type>(_Ty && _Ty2 &&) noexcept(expr):无法将参数1从“const key_type”转换为“_Ty1 &&”

std::make_pair<key_type, value_type>(key, value_type());		// 错误
std::pair<key_type, value_type>(key, value_type());		// 正确

【错误3】二进制类型“[”:没有找到接受“const std::unordered_map<>”类型左操作数的运算符(或没有可接受的转换);

void filtered(const int &key) const noexcept		// const表明该函数不能对类的成员变量进行修改
{
	//hash_map[key];				错误
	hash_map.at(key);
}

【错误4】 二进制“<”:“const_Ty”不定义该运算符或到预定义运算符可接收的类型转换

std::set<list_iterator> filter(const int &key) const noexcept
{
		std::set<list_iterator> res;
		......
		res.insert(hash_map[key]);		// 错误,没有重载list_iterator的operator < 运算符,编译报错
}
C++编译过程中,当出现"undefined reference to"的错误时,一般是由于链接时找不到对应的库引起的。解决这个问题的方法有以下几种: 1. 确保库文件存在:首先要确保所需的库文件存在,并且路径正确。可以使用`ls`命令检查库文件是否存在。 2. 添加库文件路径:如果库文件存在于非标准路径下,可以通过设置环境变量`LIBRARY_PATH`来告诉编译器库文件的位置。例如,可以使用以下命令将`/usr/local/lib`路径添加到`LIBRARY_PATH`环境变量中: ```shell export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH ``` 3. 指定库文件:如果库文件的路径无法通过环境变量解决,可以直接在编译命令中指定库文件的路径。例如,使用`-L`选项指定库文件的路径: ```shell g++ -o output_file source_file.cpp -L/path/to/library -llibrary_name ``` 4. 检查库文件名:确保在编译命令中正确指定了库文件的名称。库文件名通常以`lib`开头,并以`.a`(静态库)或`.so`(共享库)结尾。 5. 检查函数名:如果报错信息中指定了具体的函数名,可以检查函数名是否正确拼写,并确保在编译命令中正确链接了对应的库文件。 6. 检查编译顺序:如果项目中有多个源文件和库文件,确保在编译命令中按照正确的顺序指定它们。一般来说,先编译源文件,再链接库文件。 7. 检查编译选项:有时候需要添加一些特定的编译选项来解决链接错误。例如,使用`-l`选项指定链接的库文件。 8. 检查编译器版本:某些链接错误可能是由于编译器版本不兼容导致的。可以尝试升级或更换编译器版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值