将“const CMyclass”作为..的“this”参数传递.丢弃限定符 [-允许]
passing ‘const CMyclass’ as ‘this’ argument of ... discards qualifiers [-fpermissive]
编译以下代码
g++ -std=c++11 test.cpp
给我以下错误:
test.cpp: In lambda function:
test.cpp:17:128: error: passing ‘const CMyclass’ as ‘this’ argument of ‘void CMyclass::my_method(const state_type&, double)’ discards qualifiers [-fpermissive]
std::function<void(const state_type &,const double)> observer = [=](const state_type &x,const double t){my_class.my_method(x,t);};
^
我已经搜索了其他类似的问题,但我无法弄清楚这段代码有什么问题。
#include <vector>
#include <functional>
typedef std::vector<int> state_type;
class CMyclass
{
public:
void my_method( const state_type &x , const double t )
{
}
};
int main()
{
CMyclass my_class;
std::function<void(const state_type &,const double)> observer =
[=](const state_type &x,const double t)
{
my_class.my_method(x,t);
};
}
编辑:
我不会把const
放在方法之后。
由于您按值获取my_class
因此const
合格。您有三个选项可以修复它:
-
向方法添加
const
:void my_method(const state_type &x, const double t) const
-
按引用捕获:
[&](const state_type &x, const double t) { .. }
-
或者使 lambda 可变:
[=](const state_type &x,const double t) mutable { .. }
你必须将你的lambda标记为可变的
observer = [=](const state_type &x,const double t) mutable {my_class.my_method(x,t);};
完整代码如下
#include <vector>
#include <functional>
typedef std::vector<int> state_type;
class CMyclass
{
public:
void my_method( const state_type &x , const double t )
{
}
};
int main()
{
CMyclass my_class;
std::function<void(const state_type &,const double)> observer =
[=](const state_type &x,const double t) mutable {
my_class.my_method(x,t);
};
}
编译者 g++ -Wall -std=c++11
, GCC v4.9.2
传递
const CMyclass
作为void CMyclass::my_method(const state_type&, double)
丢弃限定符this
参数
错误消息说明了一切。 void CMyclass::my_method(const state_type&, double)
期望一个正常的实例,而不是一个const
实例。将方法定义更改为
void CMyclass::my_method(const state_type&, double) const;
以解决错误,或将 [=]
Lambda 初始化器更改为您需要的任何内容(例如 [&]
,但请确保它不是常量。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用指向成员的指针将成员函数作为参数传递
- 如何将参数传递给正在使用模板的类
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将部分流作为参数传递
- 我正在开发服务器,ip作为参数传递不起作用
- 将成员函数指针作为参数传递给模板方法
- 如何在C++中将迭代器作为函数参数传递
- 将附加参数传递给使用 beast::bind_front_handler 调用的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 将参数传递为"const"的奇怪效果
- 如何在 c++ 中将函数作为参数传递?
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 将"函数作为"函数"的"这个"参数传递丢弃限定符 [-允许]
- 错误:将'xxx'作为'xxx'丢弃限定符的参数传递'this' [-允许]
- 将“const CMyclass”作为..的“this”参数传递.丢弃限定符 [-允许]
- 是否允许将 *this 作为接受引用(&)的函数的参数传递?