首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

错误:将‘const Flacon’作为‘this’参数传递会丢弃限定符[-fpermissive]

错误信息说明了在将'const Flacon'作为'this'参数传递时,会丢弃限定符。这个错误通常出现在C++代码中,涉及到类的成员函数。

这个错误的原因是在成员函数的定义中,将常量对象作为this指针传递给函数,但是函数的定义中没有使用const修饰符来限定函数体内对成员变量的修改,导致编译器认为函数可能会修改常量对象的状态。

解决这个问题有两种方法:

  1. 将成员函数定义中的const修饰符添加到函数声明的末尾,以确保函数不会修改成员变量的状态。例如:
代码语言:txt
复制
void functionName() const;
  1. 如果确实需要在成员函数中修改成员变量的状态,则需要将参数传递给非常量对象。例如:
代码语言:txt
复制
void functionName(Flacon& obj);

腾讯云相关产品和产品介绍链接地址:

相关搜索:将'const franka::Robot‘作为'this’参数传递会丢弃限定符[-fpermissive] robot.loadModel();使用类模板创建动态数组时,将'const‘作为'this’参数传递会丢弃限定符在模板中使用vector::erase时,将常量迭代器作为‘this’参数传递会丢弃限定符错误:将‘const string {aka const std::__cxx11::basic_string<char>}’作为‘this’参数传递将char*作为参数传递会阻止函数工作将const std :: string&作为参数传递的日子是多少?将shared_ptr作为参数传递给线程函数,会导致错误将函数作为道具传递会导致错误吗?将枚举作为方法参数传递会导致Hibernate异常将React传递函数作为参数错误将数据集作为参数传递的进度OpenEdge会丢失值通过thunkApi配置参数将调度传递给键入的CreatedAsyncThunk会导致错误将变量作为参数传递给selenium find_element函数,而不是硬编码参数会导致InvalidArgumentException在VBA中将列表框作为函数参数传递会导致运行时错误13将"vector<string>“作为函数参数传递时,我得到一个错误C++将参数包传递给std::map会导致错误C3245当将哪些值作为参数传递给函数时,会导致使用默认值?将异步函数作为参数传递时的Promise.all错误处理语法将子网列表作为参数传递到嵌套CloudFormation模板时失败,并出现错误将php数组作为JSON传递给js会导致参数列表后未捕获SyntaxError: missing
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

临时变量作为const的引用进行参数传递引发的编译错误

其中文意思为临时变量无法为非const的引用初始化。也就是在参数传递的过程中,出现错误。...当这个临时对象传递给非const的string&引用类型时,因为非const引用绑定对象时,要求该对象也是非const对象。而在这时,因为string类型的临时对象是const对象,所以就出现错误。...因此,解决办法就是print()函数的参数改为常引用。代码修改如下,可顺利通过编译。...因为这样可以使代码更为健壮,错误暴露于编译阶段。 ---- 2.所有的临时对象都是const对象吗 为什么临时对象作为引用参数传递时,必须是常量引用呢?...很多人对此的解释是临时对象是常量,不允许赋值改动,所以作为非常量引用传递时,编译器就会报错。这个解释在关于理解临时对象不能作为const引用参数这个问题上是可以的,但不够准确。

2.6K31

错误记录】C++ 字符串常量参数报错 ( 无法参数 1 从“const char ”转换为“char *” | 从字符串文本转换丢失 const 限定符 )

1 从“const char [6]”转换为“char *” Test.cpp(12,6): message : 从字符串文本转换丢失 const 限定符(请参阅 /Zc:strictStrings...): message : 从字符串文本转换丢失 const 限定符(请参阅 /Zc:strictStrings) 1>D:\002_Project\006_Visual_Studio\HelloWorld...========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 二、问题分析 该错误 只在 高版本的 Visual Studio 中出现 , 如 Visual...void fun(char* str) { cout << str << endl; } 如果调用时 , 传入 “Hello” 参数 , 这是 const char* 类型 , 二者的参数类型不匹配...char 数组中 , char 数组作为实参传递给函数 ; char str[8] = "Hello"; fun(str); 完整代码示例 : #include "iostream" using

87510
  • 讲解error: jump to label

    讲解error: jump to label [-fpermissive]在编写和编译代码的过程中,我们可能遇到各种各样的错误。...例如,在使用 g++ 编译器时,可以执行以下命令:bashCopy codeg++ -fpermissive source.cpp -o output通过添加 -fpermissive 标志,编译器容忍跳转语句...该函数接收用户名和密码作为参数,并与存储在数据库中的合法用户名和密码进行比较。根据比较结果,我们通过使用条件语句 (if-else) 来判断登录是否成功,并返回相应的结果。...具体而言,-fpermissive 选项禁用一些严格的错误和警告,常见的包括以下几种情况:隐式类型转换:允许不同类型之间的隐式转换。...例如,整数赋值给浮点数,或者在函数调用时传递不精确匹配的参数类型等。零值初始化警告:当使用大括号初始化列表时,允许使用零值初始化非指针类型的变量。

    1.1K10

    c++编译错误汇总

    编译错误处理 gcc Q:error C2059: 语法错误:”\“ A:全局变量没有加分号,可能是复制粘贴导致的 Q:error: passing ‘const xx’ as ‘this’ argument...discards qualifiers [-fpermissive] A:调用const对象的非const方法报错,需要在方法声明和定义加const限定符 如string InetAddress::ip_ntoa...case语句块用{} 包起来 Q:编译gcc9报错config.log “unrecognized command line option ‘-V’” A:原因是较高版本的gcc不支持-V参数,修改环境变量...list-initializer for non-class type must not be parenthesized A:发生在结构体构造函数对成员变量数组进行 ({0}) 初始化,改成 {} 按照...A:不能直接对 const char 相加,使用string最左侧的 char 转换为string即可 cmake Q:Clock skew detected.

    1.6K30

    OpenGL ES 着色器语言丨音视频基础

    未被 define 定义的识别符不会被默认为 0,所以使用未定义的宏触发错误。 不支持字母常量。...#error 标识输出错误信息放到 Shader 的 logInfo 中,所以可以结合 OpenGL ES API glGetShaderInfoLog 来自定义错误类型。...1)向量构造函数 向量初始化可以用构造函数来完成,在执行构造方法的时候遵循下面的策略: 如果向量构造函数有一个标量参数,它用于构造向量的所有分量初始化为该标量的值。...这里的下一个操作包括初始化赋值、作为别的函数的传入参数作为别的函数的返回参数。...数组和结构体都可以作为函数返回值或参数。 在 GLSL ES 中当数组作为函数的返回值或参数的时候,数字大小必须是确定的。

    1.5K10

    C++ lambda表达式

    ,可在(参数)后添加mutable限定符使值捕获的数据可在函数体里修改。     ...使用lambda表达式时,编译器产生未命名类的未命名对象,且有一个调用运算符成员函数,实际使用时会调用该调用运算符成员函数。...;}; Lambda();,默认intVal为const类型,且该调用运算符是const成员函数,不可修改intVal,如果需要修改则在(参数)后添加限定符mutable: auto Lambda =...引用传递:auto Lambda = [&intVal](){cout << ++intVal << endl;}; Lambda();,引用传递是否被修改取决于intVal是否为const类型,如果被修改则会同时修改外部数据...匿名函数是可调用对象,可作为比较函数传入:  // main.cpp #include  #include  using std::cout; using std

    32640

    const详解

    基本概念 const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。...== 如果函数作为输出用,不论是什么数据类型,也不论采用指针传递还是引用传递,都不能加const 修饰,否则参数失去输出功能。...3.2 const修饰函数返回值 修饰返回值,就是不能修改返回值 对于函数来说,返回值如果是int类型的值,就算用const限定,但是函数调用结束清楚栈,因此没有必要 如果函数返回值是指针的话,我们加上限定符号...const成员函数不能修改任何的成员变量,除非变量用mutable修饰。 使用const的好处 可定义常量 防止意外修改造成的错误 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型。...编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能产生意料不到的错误。 为函数重载提供了一个参考 const修饰的函数可以看作是对同名函数的重载。

    40330

    一周技术杂谈2023_09_11--2023_09_15

    可以被调用之前上学时学到过这个概念,如今知道了具体使用场景 //int是函数返回类型,int input是函数参数 ReadInputDataCallback g_readInputDataCallback...; int* getinoutData(int inpput){ Printf(“input data is : %d \n”, inpput); } //回调函数:函数指针作为函数参数 int...RegisterReadInputDataCallback(const ReadInputDataCallback ptr){ g_readInputDataCallback = ptr; } RegisterReadInputDataCallback...编译选项,该选项的作用是允许编译一些非法的C++语法,报错转换为警告。....c的,新需求需要链接C++的库,结果链接后c++标准库找不到,还有很多系统库的错误,因为在gcc的编译器编译C++代码,后来把入口程序后缀改成了.cpp,然后解决了。。

    15520

    C++:31---对象引用和赋值

    //错误,不能将一个右值引用到左值上int &r2 = i * 42; //错误,i*42是一个右值const int &r3 = i * 42;//正确,我们可以一个const的引用绑定到一个右值上...const&& 使用规则: 对于拷贝版本:我们可以任何类型的对象传递给该版本 对于移动版本:只能传递给其非const的右值 一般来说,我们不需要为函数定义接受一个const T&&或是一个(普通的)T...const左值引用 例如: void push_(const X&); //拷贝版本void push_(X&&); //移动版本 演示案例 作为更好的例子,我们StrVec类进行修改,在其中添加了两个...,retVal()返回一个右值 i = retFoo(); //正确,我们可以一个左值作为赋值操作的右侧运算对象i = retVal(); //正确,我们可以一个右值作为赋值操作的右侧运算对象return...; //正确,与上面形成重载//Foo sorted()const; 这个是错误的}; 附加:如果一个成员函数有引用限定符,则具有相同参数列表的所有版本都必须有引用限定符

    1.7K10

    类和对象(1)

    访问限定符的作用域是从这个访问限定符开始到下一个访问限定符 class的默认访问权限为private,struct的默认访问权限为public。...例如:d1.Init(&d1,2022,1,11);会将地址传递过去。...,不能给this指针赋值(const*修饰的是指向的对象,*const修饰的是指针本身) 2 本质上是成员函数的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参,所以对象中不存储this...指针 3 this指针是成员函数的第一个形参,一般由编译器ecx自动传递 比如Date类的Init类的真实原型为: void Init(Date* const this,int year,int month...C语言和C++实现Stack的对比 c语言 c语言在实现函数时,操作函数有以下特性: 1每个函数的第一个参数都是Stack* 2函数中必须要对第一个参数检测,第一个参数是NULL 3函数都要通过Stack

    6810

    第 13 章 拷贝控制

    dots; // 拷贝初始化 string null_book = "99"; // 先隐式类型转换,再拷贝初始化 拷贝初始化在以下情况中会发生 使用=定义变量 一个对象作为实参传递给一个非引用类型的形参...r2 = i * 42; // 错误,i*42是一个右值 const int &r3 = i * 42; // 正确,可以一个 const的左值引用绑定到右值上 int &&r2 =...左值参数只能调用拷贝操作,右值参数优先调用移动操作(精确匹配,而拷贝操作往往需要进行一次到 const的转换)。所以如果没有移动操作,右值参数也会调用拷贝操作。...在参数列表后放置引用限定符 &或 &&,可以限定能够调用该函数的对象的左值/右值属性。...class Foo { public: Foo someMen() & const; // 错误const限定符必须在前 Foo otherMen() const &;

    1K50

    OpenGL ES _ 着色器_语法

    Glint glGetUniformLocation(GLuint program,const char *name) 参数 1:program 程序的标识 参数2 :name 着色器变量值得名称...1: program 程序标识 参数2:uniformBlockIndex 程序块的索引 参数3:共享缓冲区的标识 思考:uniform 变量在一个uniform块中的布局,是由指定的布局限定符来控制的...问题来了: 如果想要在每道着色器渲染时计算的位置完全相同,不然其出现这种微小的错误,怎么办呢?...break| 终止循环块的执行,并接着执行循环块后的代码| |continue|终止当前那次循环,然后继续执行下一次循环| |return|从当前自程序返回,可以同时返回一个值| |discard|丢弃当前的片段并且终止着色器执行...,接下来你可能问有哪些限定符不一样,请看下面的这张表 |访问限定符|描述| |in|值赋值到函数中| |const in|只读的值| |out|从函数中复制出来的值(在传递给函数前未初始化)|

    1.1K20

    类和对象:C++11新特性与知识补充

    int _n = 1; int* _ptr = (int*)malloc(12); 缺省值与传递参数的关系 通过传递参数,如果在构造函数初始化列表显式初始化或者函数体内使用参数的话那参数值就没有发挥出作用...; 因为每个成员都需要通过初始化列表进行初始化,如果在初始化列表没有显式初始化的话,成员就会通过声明处的缺省值进行初始化 所以说明缺省值是与初始化列表相对应的,与参数传递无关 **缺省值确实是与初始化列表相对应的...参数传递只是提供了一个在初始化列表中使用的值的方式。通过参数传递的值,如果在初始化列表中显式使用,则将覆盖声明处的缺省值。 ** (二)类型转换 类型转换是一种类型的数据转换为另一种类型的过程。...内置类型隐式转换成类类型 C++ 支持内置类型隐式转换为类类型对象,为了支持隐式类型转换,类需要提供一个接受单个参数的构造函数。...友元类的关系不能传递。如果 A 是 B 的友元,B 是 C 的友元,但是 A 不是 C 的友元。 友元类增加耦合度,破坏封装,所以不宜多用。

    8910

    C++与C中的const关键字有何差别?

    前言 在《const关键字到底该怎么用》一文中介绍了C语言中的const关键字,本文说说C++中的const关键字,它的大部分特点和C语言中的类似,所以本文主要针对不同之处。...int*’ to ‘int*’ [-fpermissive] int *p = &a; 再次强调:在实际中千万不要写这样的代码,这里只是为了说明问题。...我们常常看到传递const char*参数,像这样: void test(const char* str); 却似乎从来没有见到过const int作为参数的函数: void test(const int...因为前者传递指针的副本,指针指向不会被改变,但可以改变指向的内容;但是int类型参数,它也是传递副本,但是永远不会被函数改变,自然也没有必要加const关键字。更多解释可以参考《传值和传指针》。...如果你对下面的问题还不清楚,建议阅读《const关键字到底该怎么用》 你能分清下面的声明区别吗? const int *p; int * const p; int const * const p;

    70600

    C++之类和对象

    解答:this指针作为参数传递时是可以为空的,但是如果成员函数用到了this指针,可能造成空指针的解引用。 3.下面两段代码的运行结果分别是什么? //下面两段代码编译运行结果是?...而this指针作为参数传递时是允许为空的,在成员函数里也没有对this指针进行解引用。 代码2运行崩溃,因为在成员函数中对this指针进行解引用了,而this指针是一个空指针。...如果你非要传两个参数,那也可以无非就是程序错误而已嘛: 前后置++重载 这里有必要提一下++运算符的实现,++运算符是一个单操作运算符,也就是说只需要一个参数,也就是说只用隐含的this指针就可以了,...;所以正常的 operator++ 和 operator-- 并不能对二者进行区分;最终,C++规定:后置++/–重载时多增加一个int类型的参数,此参数在调用函数时不传递,由编译器自动传递; 其次,重载函数中的...(这里其实可以使用传值传参,但是传值传参要拷贝临时变量,所以为了提高效率还是使用引用做参数),并用const修饰(是为了防止写错顺序数据篡改)。

    1.2K00

    【C++阅览室】类和对象

    只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...无参数无返回值类型。 3. 一个类只能有一个析构函数。若未显式定义,系统自动生成默认的析构函数。注意:析构 函数不能重载 4....,含义不能改变,如:内置整形+,不能用于 - 的操作(不然降低代码可读性) 4.作为类成员函数重载时,形参数要比实际操作数少1,因为第一个形参实际上是隐藏的this指针 5. .* ::...赋值运算符重载格式 参数类型:const T&,传递引用可以提高传参效率 返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值 检测是否自己给自己赋值 返回*this :要复合连续赋值的含义...成员 const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

    5010

    C++入门----类和对象以及几个关键字的使用

    引用 传值、传引用效率的比较 以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者变量本身直 接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效...int a[10000]; }; void TestFunc1(A a){} void TestFunc2(A& a){} void TestRefAndValue() { A a; // 以值作为函数参数...begin1 = clock(); for (size_t i = 0; i < 10000; ++i) TestFunc1(a); size_t end1 = clock(); // 以引用作为函数参数...inline不建议声明和定义分离,分离导致链接错误。因为inline被展开,就没有函数地址 了,链接就会找不到。...auto不能作为参数进行传参 // 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导 void TestAuto(auto a) {} auto也不能用来直接声明数组 void

    5610
    领券