【发布时间】:2016-08-27 22:29:20
【问题描述】:
我在代码(Qt5 项目)中启用了 C++14,类似于以下内容:
auto func = [&](auto p, auto pp) {
if(!p)
return;
pp = p;
p->init();
this->member_function(pp->thing()); // replaces member_function(pp->thing());
};
MyClass *p1;
...
func(p1, m_p);
m_p->doSomething();
收到后:
internal compiler error: Segmentation fault
调试我发现m_p在调用func 后没有改变,正如我所期望的那样。通用 lambda (auto) 真的如此有效吗?如何在上面的代码中更改m_p?
【问题讨论】:
-
我在解析标题和语言功能问题时遇到问题。 “通用模板”是否有另一个名称?或者这是自动类型变量、返回类型推导或 Lambda 的问题?另见C++ Standards Support in GCC。
-
有时编译错误会触发编译器错误。也许您代码的其他部分(例如 doSomething())会产生编译错误,进而暴露编译器中的错误。尝试其他编译器或找出代码中的问题(无需编译器的帮助)。首先删除 lambda 中的捕获
&,因为它不是必需的。 -
显示
m_p的声明。 -
@Oktalist
m_p是一个类成员指针,指向正在加载的插件。 -
@alfC capture
&是必需的,因为调用了类成员函数this->member_function(pp->thing());。我发现有与此相关的 gcc 错误,不使用this->会暴露它(gcc.gnu.org/bugzilla/show_bug.cgi?id=61636)。