6错误代码C3848.

C++错误C3848:具有类型“XXX”的表达式会丢失一些 const-volatile 限定符以调用“XXX”

问题:

在练习set容器时,对其做自定义顺序排序时出现错误

错误:

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C3848 具有类型“const _Keycmp”的表达式会丢失一些 const-volatile 限定符以调用“bool myfunc::operator ()(int,int)” 07set容器 C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include\xmemory 52

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2056 非法表达式 07set容器 C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.35.32215\include\xmemory 51

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<set>//multset也是这个头文件
#include<algorithm>
#include<string>

void test()
{
	set<int>::iterator it;
	it++;
	it--;
	//it + 2;err
	//双向迭代器
}

void printSet(set<int> &s)
{
	for (set<int>::iterator it = s.begin(); it != s.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
}
/*
构造函数
set<T> st;//set默认构造函数:
mulitset<T> mst; //multiset默认构造函数:
set(const set &st);//拷贝构造函数

赋值操作
set&operator=(const set &st);//重载等号操作符
swap(st);//交换两个集合容器
大小操作
size();//返回容器中元素的数目
empty();//判断容器是否为空

插入和删除操作
insert(elem);//在容器中插入元素。
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(elem);//删除容器中值为elem的元素。


*/

void test01()
{
	set<int> s;
	s.insert(4);
	s.insert(8);
	s.insert(2);
	s.insert(10);
	s.insert(7);
	//自身规则进行排序,从小到大
	printSet(s);


}

struct myfunc
{
	bool operator()(int v1,int v2)//const
	{
		return v1 > v2;
	}
};
void printSet2(set<int, myfunc> &s)
{
	for (set<int, myfunc>::iterator it = s.begin(); it != s.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
}
//改变set容器的规则,变为降序(从大到小)
void test02()
{
	set<int, myfunc> s;
	s.insert(4);
	s.insert(8);
	s.insert(2);
	s.insert(10);
	s.insert(7);

	printSet2(s);
}

int main()
{
	test02();
	system("pause");
	return EXIT_SUCCESS;
}

解决:

结构体中函数加const

参考链接:

(9条消息) C++错误C3848:具有类型“XXX”的表达式会丢失一些 const-volatile 限定符以调用“XXX”_密苏里的小人物的博客-CSDN博客

posted @ 2023-04-15 19:13  CodeMagicianT  阅读(181)  评论(0编辑  收藏  举报