我在Qt 5中无法掌握新的信号/槽语法(使用指向成员函数的指针),如新信号槽语法中所述.我尝试改变这个:
QObject::connect(spinBox, SIGNAL(valueChanged(int)),
slider, SLOT(setValue(int));
Run Code Online (Sandbox Code Playgroud)
对此:
QObject::connect(spinBox, &QSpinBox::valueChanged,
slider, &QSlider::setValue);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时出错:
错误:没有匹配的函数用于调用
QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))
我曾经尝试过在Linux上使用clang和gcc -std=c++11.
我做错了什么,我该如何解决?
我刚刚在C++ 11中使用了新的std :: function,我编写了一个用clang ++ 3.2和Intel C++编译器13.1编译但不用g ++ 4.8编译的例子.在我将此报告为错误之前,我想我会检查我是不是做了一些非常愚蠢的事情,而且这应该实际编译.那么,以下代码是否有效c ++ 11?
template <typename C>
void map(C& c, std::function<typename C::value_type(typename C::value_type)> f)
{
for(auto& x : c) {
x = f(x);
}
}
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
map(v, [](int x) { return x+2; });
for(auto x : v) {
std::cout << x << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我意识到这段代码并不是很有用,但令我感到奇怪的是clang和Intel C++编译它并且gcc没有.
编辑:当传递map函子或函数指针时,gcc也不会编译相同的代码:
struct {
int operator() (int a) {
return a+2;
}
} add2s;
map(v, add2s);
int add2 (int a) …Run Code Online (Sandbox Code Playgroud)